{"id":18312563,"url":"https://github.com/sioaeko/openvoicechanger","last_synced_at":"2026-04-01T18:05:03.674Z","repository":{"id":241782132,"uuid":"806159773","full_name":"sioaeko/OpenVoiceChanger","owner":"sioaeko","description":"✨ A real-time voice changer application using RVC, WebSockets and ONNX/TensorFlow/PyTorch (reopen)","archived":false,"fork":false,"pushed_at":"2026-03-29T04:57:11.000Z","size":3053,"stargazers_count":52,"open_issues_count":1,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-03-29T07:34:21.757Z","etag":null,"topics":["ai","conversational-ai","converter","onnx-models","onnxruntime","pytorch","rvc","rvc-voices","tensorflow","voice","voice-conversion","voice-conversion-gan","voice-converter","websocket-server"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sioaeko.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":"2024-05-26T14:43:32.000Z","updated_at":"2026-03-29T06:59:30.000Z","dependencies_parsed_at":"2024-05-30T03:38:44.111Z","dependency_job_id":"d47ea360-c439-4643-bac5-edf2c5a10c77","html_url":"https://github.com/sioaeko/OpenVoiceChanger","commit_stats":null,"previous_names":["sioaeko/openvoicechanger"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/sioaeko/OpenVoiceChanger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sioaeko%2FOpenVoiceChanger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sioaeko%2FOpenVoiceChanger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sioaeko%2FOpenVoiceChanger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sioaeko%2FOpenVoiceChanger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sioaeko","download_url":"https://codeload.github.com/sioaeko/OpenVoiceChanger/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sioaeko%2FOpenVoiceChanger/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290742,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"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","conversational-ai","converter","onnx-models","onnxruntime","pytorch","rvc","rvc-voices","tensorflow","voice","voice-conversion","voice-conversion-gan","voice-converter","websocket-server"],"created_at":"2024-11-05T16:24:37.955Z","updated_at":"2026-04-01T18:05:03.654Z","avatar_url":"https://github.com/sioaeko.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenVoiceChanger\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/React-18-61DAFB?logo=react\u0026logoColor=white\" alt=\"React 18\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/FastAPI-0.115+-009688?logo=fastapi\u0026logoColor=white\" alt=\"FastAPI\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Vite-6-646CFF?logo=vite\u0026logoColor=white\" alt=\"Vite\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/TailwindCSS-3-06B6D4?logo=tailwindcss\u0026logoColor=white\" alt=\"TailwindCSS\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/License-MIT-green\" alt=\"MIT License\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Real-time AI voice changer web application.\u003cbr/\u003e\n  Route a microphone through ONNX or RVC models with a low-latency WebSocket audio pipeline.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#quick-start\"\u003eQuick Start\u003c/a\u003e •\n  \u003ca href=\"#model-support\"\u003eModel Support\u003c/a\u003e •\n  \u003ca href=\"#api\"\u003eAPI\u003c/a\u003e •\n  \u003ca href=\"#configuration\"\u003eConfiguration\u003c/a\u003e •\n  \u003ca href=\"README_KR.md\"\u003e한국어\u003c/a\u003e •\n  \u003ca href=\"README_JP.md\"\u003e日本語\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Features\n\n- Real-time voice conversion with binary WebSocket streaming and AudioWorklet\n- ONNX and RVC model support\n- Device routing from the browser\n- Live pitch and F0 controls while streaming\n- Session settings modal for sample rate, chunk size, and runtime visibility\n- Runtime visibility for ONNX provider, PyTorch device, GPU, and CUDA status\n- One active model at a time, with drag-and-drop upload and activation\n\n## Screenshots\n\n### Main UI\n\n![OpenVoiceChanger main UI](docs/images/main-ui.png)\n\n### Settings modal\n\n![OpenVoiceChanger settings modal](docs/images/settings-modal.png)\n\n## Quick Start\n\nThe commands below assume Windows PowerShell in the repository root.\n\n### 0. Clone the repository\n\n```powershell\ngit clone https://github.com/sioaeko/OpenVoiceChanger.git\ncd OpenVoiceChanger\n```\n\n### 1. Backend setup\n\n```powershell\npython -m venv .venv\n.venv\\Scripts\\Activate.ps1\npython -m pip install --upgrade pip\npip install -r backend/requirements.txt\npip install --no-deps git+https://github.com/RVC-Project/Retrieval-based-Voice-Conversion\n```\n\n### 2. Optional: enable ONNX GPU acceleration\n\nCPU ONNX works with the default requirements. If you want ONNX to use CUDA locally, replace the CPU package with the GPU package:\n\n```powershell\npip uninstall -y onnxruntime\npip install onnxruntime-gpu==1.23.2\n```\n\n### 3. Frontend setup\n\n```powershell\ncd frontend\nnpm install\nnpm run build\ncd ..\n```\n\n### 4. Prepare model assets\n\nRVC `.pth` / `.pt` models need a HuBERT content encoder file.\n\n```powershell\nNew-Item -ItemType Directory -Force models\\assets | Out-Null\n```\n\nPlace the file here:\n\n```text\nmodels/assets/hubert_base.pt\n```\n\nYou can override that path with `OVC_HUBERT_PATH`.\n\n### 5. Start the app\n\n```powershell\n.venv\\Scripts\\python.exe -m uvicorn backend.main:app --host 127.0.0.1 --port 8000\n```\n\nOpen:\n\n```text\nhttp://127.0.0.1:8000\n```\n\n### 6. Optional: Vite dev mode\n\nTerminal 1:\n\n```powershell\n.venv\\Scripts\\python.exe -m uvicorn backend.main:app --reload --host 127.0.0.1 --port 8000\n```\n\nTerminal 2:\n\n```powershell\ncd frontend\nnpm run dev\n```\n\nThen open `http://127.0.0.1:5173`.\n\n## Model Support\n\n| Format | Engine | Notes |\n|--------|--------|-------|\n| `.onnx` | ONNX Runtime | CPU by default, CUDA if `onnxruntime-gpu` is installed |\n| `.pth` / `.pt` | PyTorch | RVC v1/v2 models, requires `hubert_base.pt` |\n\n## Web UI Flow\n\n1. Open the app in your browser.\n2. Upload a model file in `Model Bay`.\n3. Click `Activate` on the model you want to use.\n4. Open `Settings` to review sample rate, chunk size, and runtime status.\n5. Pick your input and output devices.\n6. Click `Start Routing`.\n7. Adjust pitch and F0 while the stream is running.\n\n## API\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `GET` | `/health` | Health check |\n| `GET` | `/api/config` | Sample rate, chunk size, ONNX runtime info, PyTorch runtime info |\n| `GET` | `/api/models/` | List uploaded models |\n| `POST` | `/api/models/upload` | Upload a model file |\n| `DELETE` | `/api/models/{name}` | Delete a model |\n| `POST` | `/api/models/{name}/activate` | Activate a model |\n| `POST` | `/api/models/deactivate` | Deactivate the current model |\n| `GET` | `/api/models/active` | Get the active model |\n| `WS` | `/ws/audio` | Real-time audio streaming |\n\nInteractive docs are available at `/docs` while the backend is running.\n\n### WebSocket protocol\n\n1. Connect to `/ws/audio`\n2. Send JSON config: `{\"sample_rate\": 40000, \"chunk_size\": 4096}`\n3. Send binary audio frames: `[uint32 seq_num][uint32 reserved][float32[] PCM samples]`\n4. Receive processed audio frames in the same format\n5. Send settings updates such as `{\"pitch_shift\": 3.0, \"f0_method\": \"harvest\"}`\n\n## Configuration\n\nEnvironment variables use the `OVC_` prefix.\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `OVC_MODELS_DIR` | `models` | Model directory |\n| `OVC_HOST` | `0.0.0.0` | Backend bind address |\n| `OVC_PORT` | `8000` | Backend port |\n| `OVC_SAMPLE_RATE` | `40000` | Default sample rate |\n| `OVC_CHUNK_SIZE` | `4096` | Default chunk size |\n| `OVC_CORS_ORIGINS` | `[\"*\"]` | Allowed CORS origins |\n| `OVC_LOG_LEVEL` | `info` | Log level |\n| `OVC_HUBERT_PATH` | `models/assets/hubert_base.pt` | HuBERT path for RVC |\n| `OVC_RMVPE_ROOT` | `models/assets/rmvpe` | Optional RMVPE assets directory |\n| `OVC_RVC_STREAM_CONTEXT_SECONDS` | `1.0` | Per-stream RVC context length |\n| `OVC_RVC_INDEX_RATE` | `0.75` | Retrieval mix when a matching `.index` exists |\n| `OVC_RVC_FILTER_RADIUS` | `3` | Harvest median filter radius |\n| `OVC_RVC_RMS_MIX_RATE` | `0.25` | RMS envelope blend |\n| `OVC_RVC_PROTECT` | `0.33` | Consonant protection |\n\n## Project Structure\n\n```text\nOpenVoiceChanger/\n├── backend/\n│   ├── main.py\n│   ├── config.py\n│   ├── routers/\n│   └── services/\n├── frontend/\n│   ├── public/\n│   └── src/\n├── models/\n├── README.md\n├── README_KR.md\n├── README_JP.md\n└── Makefile\n```\n\n## Makefile\n\nThe included `Makefile` is a convenience for POSIX shells or WSL.\n\n| Command | Description |\n|---------|-------------|\n| `make install` | Install backend and frontend dependencies |\n| `make dev` | Run backend and frontend dev servers |\n| `make dev-backend` | Run backend only |\n| `make dev-frontend` | Run frontend only |\n| `make build` | Build the frontend |\n| `make clean` | Remove build artifacts |\n\n## Requirements\n\n- Python 3.10+\n- Node.js 18+\n- npm\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsioaeko%2Fopenvoicechanger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsioaeko%2Fopenvoicechanger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsioaeko%2Fopenvoicechanger/lists"}