{"id":34847563,"url":"https://github.com/dikkadev/raycast-voice","last_synced_at":"2026-04-24T17:34:11.885Z","repository":{"id":326889104,"uuid":"1102667529","full_name":"dikkadev/raycast-voice","owner":"dikkadev","description":"Local voice transcription for Raycast on Windows. Uses Whisper with CUDA GPU acceleration for fast, private transcription.","archived":false,"fork":false,"pushed_at":"2025-12-27T13:47:32.000Z","size":1218,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"trunk","last_synced_at":"2026-01-22T01:38:22.866Z","etag":null,"topics":["ai","raycast","raycast-extension","transcription","whisper"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dikkadev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-23T21:32:53.000Z","updated_at":"2025-12-27T13:47:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dikkadev/raycast-voice","commit_stats":null,"previous_names":["dikkadev/raycast-voice"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dikkadev/raycast-voice","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dikkadev%2Fraycast-voice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dikkadev%2Fraycast-voice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dikkadev%2Fraycast-voice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dikkadev%2Fraycast-voice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dikkadev","download_url":"https://codeload.github.com/dikkadev/raycast-voice/tar.gz/refs/heads/trunk","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dikkadev%2Fraycast-voice/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32234716,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","raycast","raycast-extension","transcription","whisper"],"created_at":"2025-12-25T18:52:05.280Z","updated_at":"2026-04-24T17:34:11.880Z","avatar_url":"https://github.com/dikkadev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Voice Transcription - Raycast Extension\r\n\r\nA high-performance Raycast extension for Windows that records audio and transcribes it locally using [Whisper](https://github.com/openai/whisper) (via `faster-whisper`) with CUDA GPU acceleration.\r\n\r\n## 🚀 Features\r\n\r\n- **Local Transcription**: Privacy-focused, runs entirely on your machine.\r\n- **CUDA Acceleration**: Uses NVIDIA GPU for lightning-fast transcription.\r\n- **One-Click Workflow**: Record -\u003e Transcribe -\u003e Copy/Paste.\r\n- **Auto-Start**: Server automatically starts when you use the extension.\r\n- **Auto-Action**: Automatically paste or copy transcription when complete (configurable, can be skipped).\r\n- **Transcription History**: Automatically saves transcriptions for quick access. View, search, copy/paste previous transcriptions, and export to CSV.\r\n- **Multi-Language**: Auto-detects languages (Whisper supports 99+ languages).\r\n- **Customizable**: Choose your model size (Tiny to Large) and compute device (CUDA/CPU).\r\n- **Visual Feedback**: Real-time audio level indicator and recording timer.\r\n\r\n## 📋 Prerequisites\r\n\r\n1.  **Windows** (The extension uses specific Windows APIs for process management).\r\n2.  **Raycast** for Windows.\r\n3.  **Python 3.10+** installed.\r\n4.  **UV** (Python package manager) - [Installation Guide](https://github.com/astral-sh/uv).\r\n    ```powershell\r\n    powershell -ExecutionPolicy ByPass -c \"irm https://astral.sh/uv/install.ps1 | iex\"\r\n    ```\r\n5.  **NVIDIA GPU** (Optional but recommended for speed).\r\n    *   Requires [CUDA Toolkit 12.x](https://developer.nvidia.com/cuda-downloads).\r\n    *   Requires [cuDNN 9.x](https://developer.nvidia.com/cudnn) (The backend automatically adds cuDNN to the path if found in standard locations).\r\n\r\n## 🛠️ Installation\r\n\r\n### 1. Clone and Install Extension\r\n\r\n```bash\r\n# Install frontend dependencies\r\nbun install\r\n```\r\n\r\n### 2. Install Backend Dependencies\r\n\r\nThe backend handles recording and transcription. It uses `uv` for fast dependency management.\r\n\r\n```bash\r\ncd backend\r\nuv sync\r\n```\r\n\r\nThis installs:\r\n- `faster-whisper`: Optimized Whisper implementation.\r\n- `fastapi` \u0026 `uvicorn`: API server.\r\n- `sounddevice`: Audio recording.\r\n\r\n## 🎮 Usage\r\n\r\n1.  Open Raycast and search for **\"Transcribe Voice\"**.\r\n2.  **Start Recording**:\r\n    *   If \"Auto-start\" is enabled (default), recording begins immediately.\r\n    *   Otherwise, press `Enter` to start.\r\n3.  **Speak** your text. Watch the audio level indicator to see your input.\r\n4.  **Stop**: Press `Enter` again or select \"Stop \u0026 Transcribe\".\r\n5.  **Result**:\r\n    *   If **Auto-action** is enabled (Paste or Copy), the action executes automatically when transcription completes.\r\n    *   You can skip auto-action at any time:\r\n        *   **While listening** (during recording): Press `Ctrl+A` or use the \"Skip Auto-Action\" button. (Note: `Enter` stops recording, not skip.)\r\n        *   **While transcribing** (during processing): Press `Enter` or `Ctrl+A` or use the \"Skip Auto-Action\" button. (The skip action is the primary action, so `Enter` triggers it automatically.)\r\n    *   The UI shows the configured auto-action (e.g., \"🔄 Auto-paste\") and displays it with strikethrough when disabled.\r\n    *   **Manual actions** (if auto-action is skipped or disabled):\r\n        *   **Paste**: Press `Enter` or click \"Paste\" to paste directly into the active window.\r\n        *   **Copy** (`Ctrl+C`): Copy to clipboard.\r\n        *   **Edit** (`Ctrl+E`): Make corrections before copying or pasting.\r\n        *   **View History**: View your transcription history.\r\n        *   **New Recording**: Start a new recording session.\r\n6.  **Skip Saving to History** (`Ctrl+S`): Press during recording or processing to skip saving the current transcription to history (only if \"Save to History\" is enabled in preferences).\r\n\r\n## 📚 Transcription History\r\n\r\nThe extension automatically saves your transcriptions to history (configurable via preferences). Access your history with the **\"View Transcription History\"** command:\r\n\r\n- **View History**: Search for **\"View Transcription History\"** in Raycast or use `Cmd+H` from the main transcription command.\r\n- **Search**: Use the built-in search to find specific transcriptions by text content.\r\n- **Actions**:\r\n    *   **Paste**: Press `Enter` or click to paste the selected transcription directly.\r\n    *   **Copy** (`Ctrl+C`): Copy transcription to clipboard.\r\n    *   **Export to CSV**: Export all transcriptions to a CSV file (opens Windows save dialog).\r\n    *   **Delete** (`Ctrl+Backspace`): Remove a single transcription.\r\n    *   **Clear All**: Remove all saved transcriptions.\r\n- **Metadata**: Each entry includes language, model used, device (CUDA/CPU), audio duration, transcription time, and timestamp.\r\n\r\n## ⚙️ Configuration\r\n\r\nGo to **Raycast Settings** \u003e **Extensions** \u003e **Voice Transcription** to configure:\r\n\r\n| Setting | Description | Default |\r\n| :--- | :--- | :--- |\r\n| **Backend Directory** | **Required**. Path to the `backend` folder in this project. | |\r\n| **Whisper Model** | Model size (`tiny`, `base`, `small`, `medium`, `large-v3`). Larger models are more accurate but slower. | `base` |\r\n| **Compute Device** | `CUDA` (GPU) or `CPU`. CUDA is significantly faster. | `CUDA` |\r\n| **Auto-start** | Start recording immediately when the command is opened. | `true` |\r\n| **Auto-action After Transcription** | Automatically execute `Paste` or `Copy` when transcription completes. Set to `None` to disable. | `None` |\r\n| **Save to History** | Automatically save transcriptions to history for quick access later. | `true` |\r\n| **Return to Root After Action** | Close Raycast after copy or paste actions. | `false` |\r\n| **Audio Level Polling Rate (ms)** | How often to update audio level indicator (25-250ms). Set to `0` to disable. | `100` |\r\n| **Server Port** | Port for the local transcription server. | `51234` |\r\n\r\n## 🏗️ Architecture\r\n\r\nThe extension operates as a hybrid system:\r\n\r\n1.  **Frontend (TypeScript)**: A Raycast UI that manages the user interaction and state.\r\n2.  **Backend (Python)**: A local FastAPI server managed by the frontend.\r\n    *   **Server Manager**: The frontend checks if the server is running on the specified port. If not, it launches `uv run python transcription_server.py`.\r\n    *   **Recording**: Audio is captured by the Python backend using `sounddevice` (PortAudio) to a temporary WAV file.\r\n    *   **Transcription**: When recording stops, `faster-whisper` processes the WAV file and returns the text.\r\n\r\n## 🔧 Troubleshooting\r\n\r\n### Server fails to start\r\n*   Check the \"Backend Directory\" setting in Raycast preferences. It must point to the folder containing `transcription_server.py`.\r\n*   Ensure `uv` is in your system PATH.\r\n*   Run `uv sync` in the `backend` directory manually to ensure dependencies are installed.\r\n\r\n### \"Model not loaded\" or CUDA errors\r\n*   If using CUDA, ensure you have NVIDIA drivers and CUDA Toolkit installed.\r\n*   If CUDA fails, the server attempts to fallback to CPU. Check the extension display to see if it says `cpu`.\r\n*   The first run might take longer as it downloads the Whisper model.\r\n\r\n### Recording issues\r\n*   Ensure your default microphone is set correctly in Windows Sound Settings.\r\n*   The backend uses `sounddevice`, which connects to the default input device.\r\n\r\n## 📜 License\r\n\r\n[GNU GPLv3](LICENSE)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdikkadev%2Fraycast-voice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdikkadev%2Fraycast-voice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdikkadev%2Fraycast-voice/lists"}