A GUI application for creating transcripts from video files using WhisperX
Project description
Offline Stenographer
A modern, privacy-focused GUI application for creating accurate transcripts from video files using WhisperX with a Docker backend.
Privacy-First Transcription: All processing happens locally in Docker containers - no data leaves your machine
Features
- Professional GUI: Clean, intuitive Tkinter interface
- Multiple Video Formats: Support for MP4, AVI, MKV, MOV, and more
- Speaker Diarization: Automatic speaker identification and labeling
- Multiple Output Formats: Export as TXT, Markdown, or DOCX
- GPU Acceleration: Automatic CUDA detection for faster processing
- Real-time Progress: Live progress updates during transcription
- Offline Processing: All processing happens locally via Docker
- Configurable Settings: GUI-based configuration for all WhisperX options
Requirements
System Requirements
- Python 3.12+
- Docker Desktop (for WhisperX container)
- FFmpeg (for audio/video processing)
- 8GB RAM minimum, 16GB recommended
- NVIDIA GPU (optional, for faster processing)
Supported File Formats
Video Formats
- MP4 (H.264, H.265, AV1)
- AVI (various codecs)
- MKV (Matroska)
- MOV (QuickTime)
- WMV (Windows Media Video)
- FLV (Flash Video)
- WebM (VP8, VP9)
Audio Formats
- MP3 (MPEG Audio Layer 3)
- WAV (Waveform Audio)
- M4A (MPEG-4 Audio)
- FLAC (Free Lossless Audio Codec)
- OGG (Ogg Vorbis)
- AAC (Advanced Audio Coding)
- WMA (Windows Media Audio)
Requirements
- Files must contain an audio track
- Minimum audio quality: 8kHz sampling rate
- Recommended: 16kHz+ for better accuracy
Performance Expectations
| Video Length | CPU Processing | GPU Processing (RTX 30xx+) |
|---|---|---|
| 5 minutes | ~2-3 minutes | ~30 seconds - 1 minute |
| 30 minutes | ~10-15 minutes | ~2-4 minutes |
| 1 hour | ~25-40 minutes | ~5-8 minutes |
| 2 hours | ~50-80 minutes | ~10-15 minutes |
Note: Processing times vary based on model size, audio quality, and system specifications. GPU acceleration provides 5-10x speedup with WhisperX large models.
Installation
Prerequisites
Installing FFmpeg
Before using ffmpeg-python, FFmpeg must be installed and accessible via the $PATH environment variable.
There are a variety of ways to install FFmpeg, such as the official download links, or using your package manager of choice (e.g. sudo apt install ffmpeg on Debian/Ubuntu, brew install ffmpeg on OS X, etc.).
Regardless of how FFmpeg is installed, you can check if your environment path is set correctly by running the ffmpeg command from the terminal, in which case the version information should appear, as in the following example (truncated for brevity):
$ ffmpeg
ffmpeg version 4.2.4-1ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9 (Ubuntu 9.3.0-10ubuntu2)
Note: The actual version information displayed here may vary from one system to another; but if a message such as
ffmpeg: command not foundappears instead of the version information, FFmpeg is not properly installed.
Installation Methods
Method 1: From PyPI (Recommended)
pip install offline-stenographer
Method 2: From Source
-
Clone the repository:
git clone https://github.com/Sinitca-Aleksandr/offline-stenographer.git cd offline-stenographer
-
Install dependencies:
pip install -e .
Method 3: Development Setup
For contributors and advanced users:
git clone https://github.com/Sinitca-Aleksandr/offline-stenographer.git
cd offline-stenographer
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -e ".[dev]"
Quick Start
Step 1: Initial Setup
-
Launch the application:
offline-stenographer
-
Set up HuggingFace token (required for speaker diarization):
- Navigate to: Settings → WhisperX Configuration
- Click the "Get HuggingFace Token" link to create your token
- Click "Accept Model Licenses" to access pyannote models
- Enter your token in the configuration dialog
Note: Speaker diarization requires a HuggingFace token and acceptance of pyannote model licenses.
Step 2: Process Your First Video
-
Select a video file:
- Click "Browse..." or use
Ctrl+O - Supported formats: MP4, AVI, MKV, MOV, WMV, FLV, WebM
- Files must contain an audio track
- Click "Browse..." or use
-
Configure settings (optional):
- Model: Choose from
tiny,base,small,medium,large-v3 - Language: Auto-detection or select specific language
- Device: CUDA (GPU) or CPU processing
- Speaker Diarization: Enable for automatic speaker identification
- Model: Choose from
-
Start transcription:
- Click "Start Transcription"
- Monitor real-time progress in the progress bar
- View detailed logs in the log area
- Processing happens in background Docker container
-
Export results:
- Select output format: Plain Text (.txt), Markdown (.md), or Word (.docx)
- Files are automatically saved to your chosen location
- Transcript includes timestamps and speaker identification (if enabled)
Example Output Formats
Plain Text:
[00:00:00] Speaker 1: Hello, welcome to our meeting today.
[00:00:03] Speaker 2: Thank you for joining us.
Markdown:
### Transcription
**Speaker 1** (00:00:00): Hello, welcome to our meeting today.
**Speaker 2** (00:00:03): Thank you for joining us.
Configuration
GUI Configuration
All settings can be configured through the user-friendly GUI:
- Model Selection: tiny, base, small, medium, large-v1/v2/v3
- Language: Auto-detection or specific language selection
- Device: CUDA (GPU) or CPU processing
- Speaker Diarization: Enable/disable automatic speaker detection
- Performance: Batch size optimization
Advanced Settings
- HuggingFace Token: One-click setup with direct links to token page and license acceptance
- Speaker Diarization: Visual status indicator for token configuration
- Batch Size: Optimize for your hardware
- Processing Parameters: Fine-tune for specific use cases
Troubleshooting
Common Issues and Solutions
1. Docker Issues
Problem: Docker command not found or Docker Desktop not starting
# Check if Docker is installed and running
docker --version
docker info
# On Windows, ensure Docker Desktop is running
# On Linux, start Docker service
sudo systemctl start docker
sudo systemctl enable docker
Problem: Permission denied when accessing Docker
# Add user to docker group (Linux)
sudo usermod -aG docker $USER
# Then logout and login again
2. GPU Acceleration Issues
Problem: GPU not detected or CUDA out of memory
# Check GPU availability
nvidia-smi
# Test Docker GPU support
docker run --rm --gpus all nvidia/cuda:11.0-base-ubuntu20.04 nvidia-smi
Solutions:
- Ensure NVIDIA drivers 470+ are installed
- Update Docker Desktop to latest version
- Enable GPU support in Docker settings
- Reduce batch size in application settings
- Use smaller WhisperX model (tiny/base instead of large)
3. Speaker Diarization Problems
Problem: Speaker identification fails or models won't download
Step 1: Get HuggingFace token
- Visit https://huggingface.co/settings/tokens
- Create new token with read permissions
- Copy token to application settings
Step 2: Accept model licenses
- Visit https://huggingface.co/pyannote/speaker-diarization
- https://huggingface.co/pyannote/segmentation
- Accept the terms and conditions
Problem: Network timeout during model download
# Test internet connection
ping huggingface.co
4. Memory and Performance Issues
Problem: Out of memory errors during processing
Solutions:
- Use smaller model:
tinyorbaseinstead oflarge-v3 - Close other applications to free up RAM
- Enable GPU acceleration for better memory efficiency
- Process shorter videos (split long videos if needed)
Problem: Slow processing times
# Monitor system resources
htop # or Task Manager on Windows
# Check GPU utilization
nvidia-smi -l 1
5. Audio/Video Processing Issues
Problem: "No audio track found" or "Unsupported format"
Check audio track:
# Analyze media file
ffprobe input_video.mp4
# Extract audio track for testing
ffmpeg -i input_video.mp4 -vn -acodec copy audio.m4a
Supported audio codecs:
- AAC, MP3, Opus (recommended)
- PCM, FLAC (uncompressed)
- Vorbis, WMA (may have issues)
6. Application Startup Issues
Problem: Module not found or import errors
# Verify Python version
python --version # Should be 3.12+
# Check if package is installed
pip list | grep offline-stenographer
# Reinstall if necessary
pip uninstall offline-stenographer
pip install offline-stenographer
Getting Additional Help
- Check application logs: Look in the GUI log panel for detailed error messages
- Docker logs:
docker logs <container_id>for container-specific issues - System requirements: Verify all prerequisites are met
- Create GitHub issue: Include system info, error logs, and steps to reproduce
Performance Optimization Tips
- GPU acceleration: 5-10x faster processing with NVIDIA GPUs
- Model selection: Choose appropriate model size for your accuracy needs
- Batch processing: Process multiple files in sequence for efficiency
- Audio quality: Higher quality audio = better transcription accuracy
- Language specification: Set target language for better accuracy
Contributing
We welcome contributions! Please see our detailed CONTRIBUTION.md file for comprehensive guidelines on:
- Development setup and environment configuration
- Architecture and technical details
- Development workflow and best practices
- Code style and formatting standards
- Testing requirements
- Pull request process
- Commit message guidelines
License
Apache License Version 2.0 - see LICENSE file for details.
Architecture Overview
System Architecture
┌─────────────────────────────────────────────────┐
│ GUI Layer (Tkinter) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ File │ │ Progress │ │ Export │ │
│ │ Selection │ │ Display │ │ Options │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────┬───────────────────────────────┘
│ HTTP/RPC
▼
┌─────────────────────────────────────────────────┐
│ Processing Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Docker │ │ Video │ │ Export │ │
│ │ Manager │ │ Processor │ │ Manager │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────┬───────────────────────────────┘
│ Docker API
▼
┌─────────────────────────────────────────────────┐
│ WhisperX Container │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │Transcription│ │Speaker │ │Audio │ │
│ │ │ │Diarization │ │Extraction │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────┘
Data Flow
- Input: User selects video file through GUI
- Preprocessing: Extract audio track using FFmpeg
- Processing: Send audio to WhisperX Docker container
- Analysis: Perform transcription and speaker diarization
- Formatting: Convert to user-selected output format
- Output: Save transcript file to specified location
Security & Privacy
- Local Processing: All data remains on your machine
- Container Isolation: WhisperX runs in isolated Docker container
- No Data Upload: Internet only used for model downloads
- Temporary Files: Automatic cleanup after processing
Support
For support and questions:
- Create an issue on GitHub
- Check existing documentation
- Review troubleshooting guide
- Join our community discussions
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file offline_stenographer-0.1.0.tar.gz.
File metadata
- Download URL: offline_stenographer-0.1.0.tar.gz
- Upload date:
- Size: 43.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c389f8e3f66736f934aca449e253a9e429d9e11295228124be8b14025fc64591
|
|
| MD5 |
dab17ac4505e30bf99b1a4be6fc9b3ab
|
|
| BLAKE2b-256 |
d9fec2e4e2dc3285e46ac71f7753ee7f18ad97e4cfd5b947b20ed21e17fc5b01
|
Provenance
The following attestation bundles were made for offline_stenographer-0.1.0.tar.gz:
Publisher:
python-publish.yml on Sinitca-Aleksandr/offline-stenographer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
offline_stenographer-0.1.0.tar.gz -
Subject digest:
c389f8e3f66736f934aca449e253a9e429d9e11295228124be8b14025fc64591 - Sigstore transparency entry: 565935319
- Sigstore integration time:
-
Permalink:
Sinitca-Aleksandr/offline-stenographer@29c37d14b572297687faaaa8ffddd689fc15ae47 -
Branch / Tag:
refs/tags/release/0.1.0 - Owner: https://github.com/Sinitca-Aleksandr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@29c37d14b572297687faaaa8ffddd689fc15ae47 -
Trigger Event:
release
-
Statement type:
File details
Details for the file offline_stenographer-0.1.0-py3-none-any.whl.
File metadata
- Download URL: offline_stenographer-0.1.0-py3-none-any.whl
- Upload date:
- Size: 51.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af9f236d6cf15df8fa69970bdc047265561c5be2b67f6fb6223cc835bf9cf210
|
|
| MD5 |
b389be7d12ddc7d35c76dfe64d9139c4
|
|
| BLAKE2b-256 |
ced5fee7389026d2cb8493c74bc810d178fdaad655f0d7f78353db0539dcdb8f
|
Provenance
The following attestation bundles were made for offline_stenographer-0.1.0-py3-none-any.whl:
Publisher:
python-publish.yml on Sinitca-Aleksandr/offline-stenographer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
offline_stenographer-0.1.0-py3-none-any.whl -
Subject digest:
af9f236d6cf15df8fa69970bdc047265561c5be2b67f6fb6223cc835bf9cf210 - Sigstore transparency entry: 565935326
- Sigstore integration time:
-
Permalink:
Sinitca-Aleksandr/offline-stenographer@29c37d14b572297687faaaa8ffddd689fc15ae47 -
Branch / Tag:
refs/tags/release/0.1.0 - Owner: https://github.com/Sinitca-Aleksandr
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@29c37d14b572297687faaaa8ffddd689fc15ae47 -
Trigger Event:
release
-
Statement type: