# andyanttle/ace-step-captioner-transcriber architecture

> Architecture diagram of the GitHub repository andyanttle/ace-step-captioner-transcriber, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/andyanttle/ace-step-captioner-transcriber
- Repository: https://github.com/andyanttle/ace-step-captioner-transcriber

## Overview

ACE-step Captioner & Transcriber is a Gradio application for captioning music with Qwen Omni or transcribing it with Whisper. The user selects files or a folder, chooses a model and preprocessing options, runs recognition, then views and saves results. Processing includes audio loading, optional stem separation and noise reduction, duration trimming, and segmented handling of long audio; batch work applies the workflow to multiple inputs. Model loading supports configurable precision and quantization. The README documents these capabilities, while the partial app.py excerpts confirm key processing and save behavior; some wiring is therefore shown only where documented.

Main entry points: [`app.py`](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py) (Batch processing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["User interface"]
  node_gradio_ui["Gradio interface<br/>[app.py]"]
  node_input_modes["File and folder selection<br/>[app.py]"]
  node_run_controls["Run and preprocessing settings<br/>[app.py]"]
  node_model_settings["Model configuration<br/>[app.py]"]
end

subgraph group_preparation["Audio preparation"]
  node_batch_runner["Batch processing<br/>[app.py]"]
  node_audio_loading["Audio loading<br/>[app.py]"]
  node_stem_separation["Stem separation<br/>[app.py]"]
  node_noise_reduction["Noise reduction<br/>[app.py]"]
  node_duration_trim["Duration trimming<br/>[app.py]"]
  node_segmentation["Audio segmentation<br/>[app.py]"]
end

subgraph group_recognition["Model recognition"]
  node_model_loader["Model loading<br/>[app.py]"]
  node_qwen["Qwen Omni recognition<br/>[app.py]"]
  node_whisper["Whisper transcription<br/>[app.py]"]
  node_model_weights["Model weights"]
end

subgraph group_results["Results and saving"]
  node_result_text["Text results<br/>[app.py]"]
  node_save_result["Manual and auto-save<br/>[app.py]"]
  node_output_files["Saved result files"]
end

node_user(("User"))
node_audio_inputs["Audio inputs"]

node_user -->|"uses"| node_gradio_ui
node_gradio_ui -->|"offers selection"| node_input_modes
node_user -->|"selects audio"| node_input_modes
node_input_modes -->|"selects files"| node_audio_inputs
node_gradio_ui -->|"offers settings"| node_run_controls
node_gradio_ui -->|"offers settings"| node_model_settings
node_run_controls -->|"starts processing"| node_batch_runner
node_input_modes -->|"provides inputs"| node_batch_runner
node_batch_runner -->|"loads audio"| node_audio_loading
node_batch_runner -.->|"optionally separates"| node_stem_separation
node_batch_runner -.->|"optionally reduces noise"| node_noise_reduction
node_batch_runner -.->|"optionally trims"| node_duration_trim
node_batch_runner -.->|"optionally segments"| node_segmentation
node_model_settings -->|"configures loading"| node_model_loader
node_model_loader -->|"loads weights"| node_model_weights
node_batch_runner -->|"dispatches Qwen work"| node_qwen
node_batch_runner -->|"dispatches Whisper work"| node_whisper
node_qwen -->|"returns captions"| node_result_text
node_whisper -->|"returns transcription"| node_result_text
node_result_text -->|"displays results"| node_gradio_ui
node_gradio_ui -->|"requests saving"| node_save_result
node_batch_runner -->|"auto-saves results"| node_save_result
node_save_result -->|"writes results"| node_output_files
node_user -->|"requests manual save"| node_save_result

click node_gradio_ui "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_input_modes "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_run_controls "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_model_settings "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_batch_runner "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_audio_loading "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_stem_separation "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_noise_reduction "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_duration_trim "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_segmentation "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_model_loader "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_qwen "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_whisper "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_result_text "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"
click node_save_result "https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py"

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_gradio_ui,node_input_modes,node_run_controls,node_model_settings,node_user toneBlue
class node_batch_runner,node_audio_loading,node_stem_separation,node_noise_reduction,node_duration_trim,node_segmentation toneAmber
class node_model_loader,node_qwen,node_whisper,node_model_weights toneMint
class node_result_text,node_save_result,node_output_files toneRose
class node_audio_inputs toneIndigo
```

## Components

### User interface

- [Gradio interface](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`
- [File and folder selection](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`
- [Run and preprocessing settings](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`
- [Model configuration](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`

### Audio preparation

- [Batch processing](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`
- [Audio loading](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`
- [Stem separation](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`
- [Noise reduction](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`
- [Duration trimming](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`
- [Audio segmentation](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`

### Model recognition

- [Model loading](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`
- [Qwen Omni recognition](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`
- [Whisper transcription](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`
- **Model weights**

### Results and saving

- [Text results](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`
- [Manual and auto-save](https://github.com/andyanttle/ace-step-captioner-transcriber/blob/main/app.py): `app.py`
- **Saved result files**

### Other components

- **User**
- **Audio inputs**

## Connections

- User → Gradio interface: uses
- Gradio interface → File and folder selection: offers selection
- User → File and folder selection: selects audio
- File and folder selection → Audio inputs: selects files
- Gradio interface → Run and preprocessing settings: offers settings
- Gradio interface → Model configuration: offers settings
- Run and preprocessing settings → Batch processing: starts processing
- File and folder selection → Batch processing: provides inputs
- Batch processing → Audio loading: loads audio
- Batch processing → Stem separation: optionally separates
- Batch processing → Noise reduction: optionally reduces noise
- Batch processing → Duration trimming: optionally trims
- Batch processing → Audio segmentation: optionally segments
- Model configuration → Model loading: configures loading
- Model loading → Model weights: loads weights
- Batch processing → Qwen Omni recognition: dispatches Qwen work
- Batch processing → Whisper transcription: dispatches Whisper work
- Qwen Omni recognition → Text results: returns captions
- Whisper transcription → Text results: returns transcription
- Text results → Gradio interface: displays results
- Gradio interface → Manual and auto-save: requests saving
- Batch processing → Manual and auto-save: auto-saves results
- Manual and auto-save → Saved result files: writes results
- User → Manual and auto-save: requests manual save
