Metadata-Version: 2.4
Name: audex
Version: 1.1.1
Author-email: BoChenSHEN <6goddddddd@gmail.com>
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: <3.14,>=3.10
Description-Content-Type: text/markdown
Requires-Dist: aiofiles<26,>=25.1
Requires-Dist: aiosqlite<0.22,>=0.21
Requires-Dist: argon2-cffi<26,>=25.1
Requires-Dist: cachetools<7,>=6.2.2
Requires-Dist: cryptography>=46.0.7
Requires-Dist: dependency-injector<5,>=4.48.2
Requires-Dist: dotenv<0.10,>=0.9.9
Requires-Dist: halo<0.0.32,>=0.0.31
Requires-Dist: httpx<0.29,>=0.28.1
Requires-Dist: jinja2<4,>=3.1.6
Requires-Dist: loguru<0.8,>=0.7.3
Requires-Dist: nicegui<4,>=3.3.1
Requires-Dist: numpy<2,>=1.26.4
Requires-Dist: pyaudio<0.3,>=0.2.14
Requires-Dist: pydantic<3,>=2.12.4
Requires-Dist: pydantic-settings<3,>=2.12
Requires-Dist: pydub<0.26,>=0.25.1
Requires-Dist: pyqt6<7,>=6.10; sys_platform != "linux"
Requires-Dist: pyqt6-webengine<7,>=6.10; sys_platform != "linux"
Requires-Dist: pyudev<0.25,>=0.24.4; sys_platform == "linux"
Requires-Dist: pywebview<7,>=6.1
Requires-Dist: pywin32<312,>=311; sys_platform == "win32"
Requires-Dist: qtpy<3,>=2.4.3
Requires-Dist: sqlalchemy<3,>=2.0.44
Requires-Dist: sqlmodel<0.0.28,>=0.0.27
Requires-Dist: starlette<0.51,>=0.50
Requires-Dist: tenacity<10,>=9.1.2
Requires-Dist: uvicorn[standard]<0.39,>=0.38
Requires-Dist: websockets<16,>=15.0.1
Requires-Dist: wmi<2,>=1.5.1; sys_platform == "win32"
Provides-Extra: dev
Requires-Dist: pre-commit<5,>=4.4; extra == "dev"
Requires-Dist: ruff<0.15,>=0.14.5; extra == "dev"
Provides-Extra: docs
Requires-Dist: mkdocs<2,>=1.6.1; extra == "docs"
Requires-Dist: mkdocs-material<10,>=9.7; extra == "docs"
Requires-Dist: mkdocs-minify-plugin<0.9,>=0.8; extra == "docs"
Requires-Dist: mkdocstrings[python]<0.31,>=0.30.1; extra == "docs"
Requires-Dist: pymdown-extensions<11,>=10.17.1; extra == "docs"
Provides-Extra: test
Requires-Dist: mypy<2,>=1.18.2; extra == "test"
Requires-Dist: pylint<5,>=4.0.3; extra == "test"
Requires-Dist: pytest<10,>=9.0.1; extra == "test"
Requires-Dist: pytest-asyncio<2,>=1.3; extra == "test"
Requires-Dist: pytest-cov<8,>=7; extra == "test"
Requires-Dist: types-aiofiles<26,>=25.1.0.20251011; extra == "test"
Requires-Dist: types-cachetools<7,>=6.2.0.20251022; extra == "test"
Requires-Dist: types-pyyaml<7,>=6.0.12.20250915; extra == "test"

<div align="center">

![Audex Logo](docs/assets/logo.svg)

# Audex

[![PyPI version](https://badge.fury.io/py/audex.svg)](https://pypi.org/project/audex/)
[![Python](https://img.shields.io/pypi/pyversions/audex.svg)](https://pypi.org/project/audex/)
[![License](https://img.shields.io/github/license/6ixGODD/audex.svg)](https://github.com/6ixGODD/audex/blob/main/LICENSE)
[![GitHub stars](https://img.shields.io/github/stars/6ixGODD/audex.svg)](https://github.com/6ixGODD/audex/stargazers)

Derived from "Audio Exchange", Smart Medical Recording & Transcription System with voice recognition and speaker identification.

[Documentation](https://6ixgodd.github.io/audex/) • [Installation Guide](https://6ixgodd.github.io/audex/installation/) • [API Reference](https://6ixgodd.github.io/audex/reference/)

English | [简体中文](README.zh-CN.md)

</div>

---

## System Requirements

- Python 3.10-3.13
- uv (package manager)
- PortAudio
- FFmpeg
- SQLite3
- PyQt6 (Linux: install from system packages)
- NetworkManager (Linux: for WiFi connectivity)

### System Dependencies

**Ubuntu/Debian:**
```bash
sudo apt-get install python3-pyqt6 python3-pyqt6.qtwebengine \
    portaudio19-dev ffmpeg sqlite3 network-manager \
    libfcitx5-qt6-1 alsa-utils gcc build-essential
```

**macOS:**
```bash
brew install portaudio ffmpeg sqlite3
pip install PyQt6 PyQt6-WebEngine
```

**Windows:**
- PortAudio is bundled with PyAudio wheel
- FFmpeg: Download from https://ffmpeg.org/download.html and add to `PATH`
- SQLite3: Included with Python installation

---

## Installation

### From PyPI

```bash
pip install audex
```

### From Source

```bash
git clone https://github.com/6ixGODD/audex.git
cd audex
uv sync
```

### DEB Package (Debian/Ubuntu/Raspberry Pi)

Download the appropriate DEB package for your architecture from [Releases](https://github.com/6ixGODD/audex/releases).

For detailed installation instructions, see [Installation Guide](https://6ixgodd.github.io/audex/installation/).

**Quick Install:**

```bash
# Download and install
sudo dpkg -i audex_{version}_arm64.deb
sudo apt-get install -f

# Run configuration wizard
sudo audex-setup

# Start application
sudo audex
```

---

## Usage

### Run Application

```bash
# Start with config file
audex -c config.yaml

# Using installed package
python -m audex -c config.yaml
```

### Initialize Configuration

```bash
# Generate default configuration
audex init gencfg --format yaml --output config.yaml

# Generate system configuration (Linux)
audex init gencfg --format system --output /etc/audex/config.yml --platform linux
```

### Initialize VPR Group

```bash
# Initialize voice print recognition group
audex init vprgroup --config config.yaml
```

### File Export Server

```bash
# Start file export server
audex serve --config config.yaml
```

---

## Configuration

Configuration file structure:

```yaml
core:
  app:
    app_name: Audex
    native: true
  logging:
    targets:
      - logname: stdout
        loglevel: info
  audio:
    sample_rate: 16000

provider:
  transcription:
    provider: dashscope
    dashscope:
      credential:
        api_key: <YOUR_API_KEY>

  vpr:
    provider: xfyun
    xfyun:
      credential:
        app_id: <YOUR_APP_ID>
        api_key: <YOUR_API_KEY>
        api_secret: <YOUR_API_SECRET>

infrastructure:
  sqlite:
    uri: "sqlite+aiosqlite:///path/to/audex.db"
  store:
    type: localfile
    base_url: /path/to/store
```

See `config.example.yml` for complete configuration options.

---

## Development

### Install Development Dependencies

```bash
# Development environment
uv sync --extra dev

# Testing environment
uv sync --extra test

# Documentation environment
uv sync --extra docs
```

### Build Package

```bash
# Build wheel and sdist
uv build

# Output: dist/audex-{version}-py3-none-any.whl
```

### Run Tests

```bash
uv sync --extra test
uv run pytest
```

### Documentation

```bash
uv sync --extra docs
uv run mkdocs serve

# Visit: http://127.0.0.1:8000
```

---

## DEB Package Development

### Build DEB Package

**Prerequisites:**
- Docker

**Build:**

```bash
cd packaging/linux

# Build for ARM64 (Raspberry Pi)
./build.sh

# Build for AMD64
./build.sh amd64
```

**Output:** `dist/audex_{version}_{arch}.deb`

### Test DEB Package

```bash
cd packaging/linux
./test.sh arm64
```

**Inside test container:**

```bash
# Install package
dpkg -i /tmp/audex.deb
apt-get install -f

# Verify installation
which audex
audex --version

# View configurations
cat /etc/audex/config.system.yml
cat /etc/audex/config.example.yml

# Run configuration wizard
audex-setup

# Exit container
exit
```

---

## Project Structure

```
audex/
├── audex/                 # Main package
│   ├── cli/               # Command-line interface
│   ├── service/           # Business layer
│   ├── entity/            # Entities
│   ├── filters/           # Data filters
│   ├── valueobj/          # Value objects
│   ├── view/              # View layer
│   └── lib/               # Shared libraries
├── packaging/
│   └── linux/             # DEB packaging
│       ├── templates/     # Package templates
│       ├── build.sh       # Build script
│       └── test.sh        # Test script
├── scripts/               # Development scripts
├── tests/                 # Test suite
└── pyproject.toml         # Project configuration
```

---

## Links

- **Documentation**: https://6ixgodd.github.io/audex/
- **PyPI**: https://pypi.org/project/audex/
- **GitHub**: https://github.com/6ixGODD/audex
- **Issues**: https://github.com/6ixGODD/audex/issues
- **Releases**: https://github.com/6ixGODD/audex/releases

---
