Metadata-Version: 2.4
Name: transcribe-studio
Version: 0.2.3
Summary: Local classroom audio transcription with projects, WER evaluation, and pluggable transcript formats
Author: Mishkat Quantum Labs
License-Expression: MIT
Project-URL: Homepage, https://github.com/Mishkat-Quantum-Labs/transcribe-studio
Project-URL: Repository, https://github.com/Mishkat-Quantum-Labs/transcribe-studio
Project-URL: Issues, https://github.com/Mishkat-Quantum-Labs/transcribe-studio/issues
Project-URL: Changelog, https://github.com/Mishkat-Quantum-Labs/transcribe-studio/blob/main/CHANGELOG.md
Keywords: transcription,classroom,audio,wer,speech,evaluation
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Framework :: FastAPI
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: fastapi>=0.115.0
Requires-Dist: uvicorn[standard]>=0.32.0
Requires-Dist: jinja2>=3.1.0
Requires-Dist: python-multipart>=0.0.12
Requires-Dist: aiofiles>=24.1.0
Provides-Extra: dev
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: build>=1.0; extra == "dev"
Requires-Dist: twine>=5.0; extra == "dev"
Dynamic: license-file

# Transcribe Studio

[![CI](https://github.com/Mishkat-Quantum-Labs/transcribe-studio/actions/workflows/ci.yml/badge.svg)](https://github.com/Mishkat-Quantum-Labs/transcribe-studio/actions/workflows/ci.yml)

A local, browser-based tool for classroom audio transcription. Organize work by **project**, split audio into timed chunks, label speakers in free text, and evaluate human transcripts against LLM output (WER + semantic WER).

Built for researchers and annotators who need millisecond timestamps and exportable data — without Label Studio complexity.

## Features

- **Projects** — group recordings by class, session, or study
- **Waveform editor** — divide audio into chunks (by duration or count), overlap speakers at the same timestamp
- **Chunk playback** — play one chunk at a time with **speed up/down** (0.25×–2×, keys `,` / `.`)
- **Exports** — TXT, Markdown, JSON, CSV, SRT, WebVTT
- **LLM evaluation** — paste or upload hypothesis transcripts; strict + semantic WER
- **Pluggable formats** — timestamp/speaker lines, JSON segments, plain text (TOML-driven)

## Quick start

### With uv (recommended)

```bash
git clone https://github.com/Mishkat-Quantum-Labs/transcribe-studio.git
cd transcribe-studio
uv venv
uv pip install -e ".[dev]"
uv run transcribe-studio
```

### With pip

```bash
pip install transcribe-studio
transcribe-studio
```

Open **http://127.0.0.1:8082**

**Options:**

```bash
transcribe-studio start --port 8083
transcribe-studio --port 8083          # same as start
transcribe-studio stop                 # free the port if still running
transcribe-studio status
transcribe-studio start --force        # stop old instance, then start
```

### Windows: command not found?

On some Windows setups (especially Microsoft Store Python), `transcribe-studio` is installed but not on your PATH. Use any of these instead:

```bash
python -m app
python -m app --port 8083
```

Or install with [pipx](https://pipx.pypa.io/) (adds the command to PATH automatically):

```bash
pip install pipx
pipx install transcribe-studio
transcribe-studio
```

## Usage

1. Create a **project** from the dashboard
2. **Upload** an MP3/WAV/M4A/OGG/FLAC recording
3. **Divide** the wave into chunks, then transcribe each segment
4. Use **Evaluation** to compare your transcript against an LLM upload
5. **Export** when done

Data is stored under `~/.transcribe-studio/` (override with `TRANSCRIBE_STUDIO_DATA`).

**Environment variables:**

| Variable | Default | Description |
|----------|---------|-------------|
| `TRANSCRIBE_STUDIO_DATA` | `~/.transcribe-studio` | Data directory |
| `TRANSCRIBE_STUDIO_HOST` | `127.0.0.1` | Bind address |
| `TRANSCRIBE_STUDIO_PORT` | `8082` | Listen port |

**Supabase:** open **Settings** in the sidebar to add your project URL and anon key.

## Deploy on AWS (free tier)

```bash
cd infra
cp terraform.tfvars.example terraform.tfvars
terraform init && terraform apply
```

See [infra/README.md](infra/README.md). Nginx serves port **80** → app on **8082**.

## Development

```bash
uv pip install -e ".[dev]"
uv run pytest
```

## Publishing

### PyPI via uv (recommended)

```bash
uv build
uv publish   # uses UV_PUBLISH_TOKEN or prompts for PyPI credentials
```

### PyPI via pip/twine

```bash
pip install build twine
python -m build
twine upload dist/*
```

### GitHub release

```bash
git tag v0.2.0
git push origin v0.2.0
gh release create v0.2.0 dist/*
```

## Configuration

Evaluation and transcript import settings ship inside the package:

- `app/config/evaluation.toml`
- `app/config/transcript_formats.toml`
- `app/config/languages/en.toml`

## License

MIT — see [LICENSE](LICENSE).

## Contributing

Issues and PRs welcome at [github.com/Mishkat-Quantum-Labs/transcribe-studio](https://github.com/Mishkat-Quantum-Labs/transcribe-studio).
