witticism


Namewitticism JSON
Version 0.5.0 PyPI version JSON
download
home_pageNone
SummaryWhisperX-powered global transcription and push-to-talk application
upload_time2025-08-24 18:23:53
maintainerNone
docs_urlNone
authorNone
requires_python<3.13,>=3.9
licenseNone
keywords transcription whisperx speech-recognition push-to-talk
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Witticism

[![CI](https://github.com/Aaronontheweb/witticism/actions/workflows/ci.yml/badge.svg)](https://github.com/Aaronontheweb/witticism/actions/workflows/ci.yml)
[![PyPI version](https://img.shields.io/pypi/v/witticism.svg)](https://pypi.org/project/witticism/)
[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![Python](https://img.shields.io/badge/python-3.9%20%7C%203.10%20%7C%203.11%20%7C%203.12-blue)](https://www.python.org/downloads/)
[![GitHub release](https://img.shields.io/github/release/Aaronontheweb/witticism.svg)](https://github.com/Aaronontheweb/witticism/releases/latest)

🎙️ **One-command install. Zero configuration. Just works.**

WhisperX-powered voice transcription tool that types text directly at your cursor position. Hold F9 to record, release to transcribe.

## ✨ Features

- **🚀 One-Command Install** - Automatic GPU detection and configuration
- **🎮 True GPU Acceleration** - Full CUDA support, even for older GPUs (GTX 10xx series)
- **⚡ Instant Transcription** - Press F9, speak, release. Text appears at cursor
- **🔄 Continuous Dictation Mode** - Toggle on for hands-free transcription
- **🎯 System Tray Integration** - Runs quietly in background, always ready
- **📦 No Configuration** - Works out of the box with smart defaults
- **🔧 Easy Updates** - Re-run install script to upgrade to latest version

## Why Witticism?

Built to solve real GPU acceleration issues with whisper.cpp. WhisperX provides:
- Proper CUDA/GPU support for faster transcription (2-10x faster than CPU)
- Word-level timestamps and alignment for accuracy
- Better accuracy with less latency
- Native Python integration that actually works

## Installation

### 🚀 Quick Install (Recommended)

**Just run this one command:**

```bash
curl -sSL https://raw.githubusercontent.com/Aaronontheweb/witticism/master/install.sh | bash
```

**That's it!** The installer will:
- ✅ Install system dependencies automatically (asks for sudo only if needed)
- ✅ Detect your GPU automatically (GTX 1080, RTX 3090, etc.)
- ✅ Install the right CUDA/PyTorch versions
- ✅ Create desktop launcher with custom icon
- ✅ Set up auto-start on login
- ✅ Configure the system tray icon
- ✅ Handle all dependencies in an isolated environment

**No Python knowledge required. No CUDA configuration. It just works.**

Note: The installer will ask for your sudo password only if PortAudio needs to be installed. Witticism itself runs as your regular user.

### Manual Installation

If you prefer to install manually:

### Prerequisites

- **Linux** (Ubuntu, Fedora, Debian, etc.)
- **Python 3.10-3.12** (pipx will handle this)
- **NVIDIA GPU** (optional but recommended for faster transcription)

1. Install system dependencies:
```bash
# Debian/Ubuntu
sudo apt-get install portaudio19-dev

# Fedora/RHEL
sudo dnf install portaudio-devel

# Arch Linux
sudo pacman -S portaudio
```

2. Install pipx if needed:
```bash
python3 -m pip install --user pipx
python3 -m pipx ensurepath
```

3. Install Witticism:
```bash
# For CPU-only
pipx install witticism

# For GPU with CUDA 11.8+
pipx install witticism --pip-args="--index-url https://download.pytorch.org/whl/cu118 --extra-index-url https://pypi.org/simple"

# For GPU with CUDA 12.1+
pipx install witticism --pip-args="--index-url https://download.pytorch.org/whl/cu121 --extra-index-url https://pypi.org/simple"
```

4. Set up auto-start (optional):
```bash
mkdir -p ~/.config/autostart
cat > ~/.config/autostart/witticism.desktop << EOF
[Desktop Entry]
Type=Application
Name=Witticism
Exec=$HOME/.local/bin/witticism
StartupNotify=false
Terminal=false
X-GNOME-Autostart-enabled=true
EOF
```

### Desktop Integration

The quick installer automatically sets up desktop integration with launcher icon. If you installed manually, Witticism can still be launched from the terminal with the `witticism` command.

### Upgrading

To upgrade to the latest version, simply re-run the install script:

```bash
curl -sSL https://raw.githubusercontent.com/Aaronontheweb/witticism/master/install.sh | bash
```

The install script is idempotent and will automatically upgrade existing installations to the latest version with all dependencies.

## Usage

### Basic Operation

1. The app runs in your system tray (green "W" icon)
2. **Hold F9** to start recording
3. **Release F9** to stop and transcribe
4. Text appears instantly at your cursor position

**Or use Continuous Mode:**
- Toggle continuous dictation from the tray menu
- Speak naturally - transcription happens automatically
- Perfect for long-form writing

### System Tray Menu

- **Status**: Shows current state (Ready/Recording/Transcribing)
- **Model**: Choose transcription model
  - `tiny/tiny.en`: Fastest, less accurate
  - `base/base.en`: Good balance (default)
  - `small/medium/large-v3`: More accurate, slower
- **Audio Device**: Select input microphone
- **Quit**: Exit application

### Command Line Options

```bash
witticism --model base --log-level INFO
```

Options:
- `--model`: Choose model (tiny, base, small, medium, large-v3)
- `--log-level`: Set logging verbosity (DEBUG, INFO, WARNING, ERROR)
- `--reset-config`: Reset settings to defaults
- `--version`: Show version information

## Configuration

Config file location: `~/.config/witticism/config.json`

Key settings:
```json
{
  "model": {
    "size": "base",
    "device": "auto"
  },
  "hotkeys": {
    "push_to_talk": "f9"
  }
}
```

## Performance

With GTX 1080 GPU:
- **tiny model**: ~0.5s latency, 5-10x realtime
- **base model**: ~1-2s latency, 2-5x realtime  
- **large-v3**: ~3-5s latency, 1-2x realtime

CPU-only fallback available but slower.

## Troubleshooting

### No audio input
- Check microphone permissions
- Try selecting a different audio device from tray menu

### CUDA not detected
```bash
python -c "import torch; print(torch.cuda.is_available())"
```
Should return `True` if CUDA is available.

### Models not loading
First run downloads models (~150MB for base). Ensure stable internet connection.

### Debug logging
By default, witticism logs to `~/.local/share/witticism/debug.log` when debug level is enabled. 

To enable debug logging, either:
- Run with `--log-level DEBUG`
- Edit `~/.config/witticism/config.json` and set `"logging": {"level": "DEBUG", "file": "~/.local/share/witticism/debug.log"}`

Common issues visible in debug logs:
- "No active speech found in audio" - Check microphone connection/volume
- CUDA context errors - Restart after suspend/resume
- Model loading failures - Check GPU memory with `nvidia-smi`

## Development

### Project Structure
```
src/witticism/
├── core/           # Core functionality
│   ├── whisperx_engine.py
│   ├── audio_capture.py
│   ├── hotkey_manager.py
│   └── transcription_pipeline.py
├── ui/             # User interface
│   └── system_tray.py
├── utils/          # Utilities
│   ├── output_manager.py
│   ├── config_manager.py
│   └── logging_config.py
└── main.py         # Entry point
```

## Author

Created by [Aaron Stannard](https://aaronstannard.com/)

## License

Apache-2.0

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "witticism",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<3.13,>=3.9",
    "maintainer_email": null,
    "keywords": "transcription, whisperx, speech-recognition, push-to-talk",
    "author": null,
    "author_email": "Aaron Stannard <aaron@petabridge.com>",
    "download_url": "https://files.pythonhosted.org/packages/85/7b/b90cc9b4c59fd54035997cef99f862b6d96faf148f82fdba4f177e79274c/witticism-0.5.0.tar.gz",
    "platform": null,
    "description": "# Witticism\n\n[![CI](https://github.com/Aaronontheweb/witticism/actions/workflows/ci.yml/badge.svg)](https://github.com/Aaronontheweb/witticism/actions/workflows/ci.yml)\n[![PyPI version](https://img.shields.io/pypi/v/witticism.svg)](https://pypi.org/project/witticism/)\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Python](https://img.shields.io/badge/python-3.9%20%7C%203.10%20%7C%203.11%20%7C%203.12-blue)](https://www.python.org/downloads/)\n[![GitHub release](https://img.shields.io/github/release/Aaronontheweb/witticism.svg)](https://github.com/Aaronontheweb/witticism/releases/latest)\n\n\ud83c\udf99\ufe0f **One-command install. Zero configuration. Just works.**\n\nWhisperX-powered voice transcription tool that types text directly at your cursor position. Hold F9 to record, release to transcribe.\n\n## \u2728 Features\n\n- **\ud83d\ude80 One-Command Install** - Automatic GPU detection and configuration\n- **\ud83c\udfae True GPU Acceleration** - Full CUDA support, even for older GPUs (GTX 10xx series)\n- **\u26a1 Instant Transcription** - Press F9, speak, release. Text appears at cursor\n- **\ud83d\udd04 Continuous Dictation Mode** - Toggle on for hands-free transcription\n- **\ud83c\udfaf System Tray Integration** - Runs quietly in background, always ready\n- **\ud83d\udce6 No Configuration** - Works out of the box with smart defaults\n- **\ud83d\udd27 Easy Updates** - Re-run install script to upgrade to latest version\n\n## Why Witticism?\n\nBuilt to solve real GPU acceleration issues with whisper.cpp. WhisperX provides:\n- Proper CUDA/GPU support for faster transcription (2-10x faster than CPU)\n- Word-level timestamps and alignment for accuracy\n- Better accuracy with less latency\n- Native Python integration that actually works\n\n## Installation\n\n### \ud83d\ude80 Quick Install (Recommended)\n\n**Just run this one command:**\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/Aaronontheweb/witticism/master/install.sh | bash\n```\n\n**That's it!** The installer will:\n- \u2705 Install system dependencies automatically (asks for sudo only if needed)\n- \u2705 Detect your GPU automatically (GTX 1080, RTX 3090, etc.)\n- \u2705 Install the right CUDA/PyTorch versions\n- \u2705 Create desktop launcher with custom icon\n- \u2705 Set up auto-start on login\n- \u2705 Configure the system tray icon\n- \u2705 Handle all dependencies in an isolated environment\n\n**No Python knowledge required. No CUDA configuration. It just works.**\n\nNote: The installer will ask for your sudo password only if PortAudio needs to be installed. Witticism itself runs as your regular user.\n\n### Manual Installation\n\nIf you prefer to install manually:\n\n### Prerequisites\n\n- **Linux** (Ubuntu, Fedora, Debian, etc.)\n- **Python 3.10-3.12** (pipx will handle this)\n- **NVIDIA GPU** (optional but recommended for faster transcription)\n\n1. Install system dependencies:\n```bash\n# Debian/Ubuntu\nsudo apt-get install portaudio19-dev\n\n# Fedora/RHEL\nsudo dnf install portaudio-devel\n\n# Arch Linux\nsudo pacman -S portaudio\n```\n\n2. Install pipx if needed:\n```bash\npython3 -m pip install --user pipx\npython3 -m pipx ensurepath\n```\n\n3. Install Witticism:\n```bash\n# For CPU-only\npipx install witticism\n\n# For GPU with CUDA 11.8+\npipx install witticism --pip-args=\"--index-url https://download.pytorch.org/whl/cu118 --extra-index-url https://pypi.org/simple\"\n\n# For GPU with CUDA 12.1+\npipx install witticism --pip-args=\"--index-url https://download.pytorch.org/whl/cu121 --extra-index-url https://pypi.org/simple\"\n```\n\n4. Set up auto-start (optional):\n```bash\nmkdir -p ~/.config/autostart\ncat > ~/.config/autostart/witticism.desktop << EOF\n[Desktop Entry]\nType=Application\nName=Witticism\nExec=$HOME/.local/bin/witticism\nStartupNotify=false\nTerminal=false\nX-GNOME-Autostart-enabled=true\nEOF\n```\n\n### Desktop Integration\n\nThe quick installer automatically sets up desktop integration with launcher icon. If you installed manually, Witticism can still be launched from the terminal with the `witticism` command.\n\n### Upgrading\n\nTo upgrade to the latest version, simply re-run the install script:\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/Aaronontheweb/witticism/master/install.sh | bash\n```\n\nThe install script is idempotent and will automatically upgrade existing installations to the latest version with all dependencies.\n\n## Usage\n\n### Basic Operation\n\n1. The app runs in your system tray (green \"W\" icon)\n2. **Hold F9** to start recording\n3. **Release F9** to stop and transcribe\n4. Text appears instantly at your cursor position\n\n**Or use Continuous Mode:**\n- Toggle continuous dictation from the tray menu\n- Speak naturally - transcription happens automatically\n- Perfect for long-form writing\n\n### System Tray Menu\n\n- **Status**: Shows current state (Ready/Recording/Transcribing)\n- **Model**: Choose transcription model\n  - `tiny/tiny.en`: Fastest, less accurate\n  - `base/base.en`: Good balance (default)\n  - `small/medium/large-v3`: More accurate, slower\n- **Audio Device**: Select input microphone\n- **Quit**: Exit application\n\n### Command Line Options\n\n```bash\nwitticism --model base --log-level INFO\n```\n\nOptions:\n- `--model`: Choose model (tiny, base, small, medium, large-v3)\n- `--log-level`: Set logging verbosity (DEBUG, INFO, WARNING, ERROR)\n- `--reset-config`: Reset settings to defaults\n- `--version`: Show version information\n\n## Configuration\n\nConfig file location: `~/.config/witticism/config.json`\n\nKey settings:\n```json\n{\n  \"model\": {\n    \"size\": \"base\",\n    \"device\": \"auto\"\n  },\n  \"hotkeys\": {\n    \"push_to_talk\": \"f9\"\n  }\n}\n```\n\n## Performance\n\nWith GTX 1080 GPU:\n- **tiny model**: ~0.5s latency, 5-10x realtime\n- **base model**: ~1-2s latency, 2-5x realtime  \n- **large-v3**: ~3-5s latency, 1-2x realtime\n\nCPU-only fallback available but slower.\n\n## Troubleshooting\n\n### No audio input\n- Check microphone permissions\n- Try selecting a different audio device from tray menu\n\n### CUDA not detected\n```bash\npython -c \"import torch; print(torch.cuda.is_available())\"\n```\nShould return `True` if CUDA is available.\n\n### Models not loading\nFirst run downloads models (~150MB for base). Ensure stable internet connection.\n\n### Debug logging\nBy default, witticism logs to `~/.local/share/witticism/debug.log` when debug level is enabled. \n\nTo enable debug logging, either:\n- Run with `--log-level DEBUG`\n- Edit `~/.config/witticism/config.json` and set `\"logging\": {\"level\": \"DEBUG\", \"file\": \"~/.local/share/witticism/debug.log\"}`\n\nCommon issues visible in debug logs:\n- \"No active speech found in audio\" - Check microphone connection/volume\n- CUDA context errors - Restart after suspend/resume\n- Model loading failures - Check GPU memory with `nvidia-smi`\n\n## Development\n\n### Project Structure\n```\nsrc/witticism/\n\u251c\u2500\u2500 core/           # Core functionality\n\u2502   \u251c\u2500\u2500 whisperx_engine.py\n\u2502   \u251c\u2500\u2500 audio_capture.py\n\u2502   \u251c\u2500\u2500 hotkey_manager.py\n\u2502   \u2514\u2500\u2500 transcription_pipeline.py\n\u251c\u2500\u2500 ui/             # User interface\n\u2502   \u2514\u2500\u2500 system_tray.py\n\u251c\u2500\u2500 utils/          # Utilities\n\u2502   \u251c\u2500\u2500 output_manager.py\n\u2502   \u251c\u2500\u2500 config_manager.py\n\u2502   \u2514\u2500\u2500 logging_config.py\n\u2514\u2500\u2500 main.py         # Entry point\n```\n\n## Author\n\nCreated by [Aaron Stannard](https://aaronstannard.com/)\n\n## License\n\nApache-2.0\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "WhisperX-powered global transcription and push-to-talk application",
    "version": "0.5.0",
    "project_urls": null,
    "split_keywords": [
        "transcription",
        " whisperx",
        " speech-recognition",
        " push-to-talk"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "28c9314f1746ceeff6500cf12f21528d95ee79e33a8c68ee6429969710aa6233",
                "md5": "65ebabbd092385b50ec4ceac6401f7b8",
                "sha256": "44ff5b531057c78b4e8f8d6a88ed0ef5c8c66eb91a9e2ec4d58da38c90c344b9"
            },
            "downloads": -1,
            "filename": "witticism-0.5.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "65ebabbd092385b50ec4ceac6401f7b8",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<3.13,>=3.9",
            "size": 116383,
            "upload_time": "2025-08-24T18:23:52",
            "upload_time_iso_8601": "2025-08-24T18:23:52.398141Z",
            "url": "https://files.pythonhosted.org/packages/28/c9/314f1746ceeff6500cf12f21528d95ee79e33a8c68ee6429969710aa6233/witticism-0.5.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "857bb90cc9b4c59fd54035997cef99f862b6d96faf148f82fdba4f177e79274c",
                "md5": "3fe230ff7cabdc7abf8f8aa3345f1fac",
                "sha256": "db9276ab750fb550b93932ee652d0d4176bde11d49d143d365ff55a05c4ebb19"
            },
            "downloads": -1,
            "filename": "witticism-0.5.0.tar.gz",
            "has_sig": false,
            "md5_digest": "3fe230ff7cabdc7abf8f8aa3345f1fac",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<3.13,>=3.9",
            "size": 206010,
            "upload_time": "2025-08-24T18:23:53",
            "upload_time_iso_8601": "2025-08-24T18:23:53.562864Z",
            "url": "https://files.pythonhosted.org/packages/85/7b/b90cc9b4c59fd54035997cef99f862b6d96faf148f82fdba4f177e79274c/witticism-0.5.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-24 18:23:53",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "witticism"
}
        
Elapsed time: 1.44959s