{"id":49882931,"url":"https://github.com/langurmonkey/qwensay","last_synced_at":"2026-05-15T16:07:39.976Z","repository":{"id":354352698,"uuid":"1222755252","full_name":"langurmonkey/qwensay","owner":"langurmonkey","description":"CLI tool for text-to-speech synthesis using Qwen3-TTS","archived":false,"fork":false,"pushed_at":"2026-04-28T08:08:10.000Z","size":122,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-28T08:30:48.062Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/langurmonkey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2026-04-27T17:15:42.000Z","updated_at":"2026-04-28T08:08:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/langurmonkey/qwensay","commit_stats":null,"previous_names":["langurmonkey/qwensay"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/langurmonkey/qwensay","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/langurmonkey%2Fqwensay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/langurmonkey%2Fqwensay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/langurmonkey%2Fqwensay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/langurmonkey%2Fqwensay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/langurmonkey","download_url":"https://codeload.github.com/langurmonkey/qwensay/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/langurmonkey%2Fqwensay/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33071636,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T11:35:32.926Z","status":"ssl_error","status_checked_at":"2026-05-15T11:35:31.362Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":[],"created_at":"2026-05-15T16:07:39.205Z","updated_at":"2026-05-15T16:07:39.968Z","avatar_url":"https://github.com/langurmonkey.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QwenSay\n\nA command-line tool for text-to-speech synthesis using [Qwen3-TTS](https://github.com/QwenLM/Qwen3-TTS) — supports free-form voice design, preset speakers, and voice cloning. Models are downloaded automatically from Hugging Face on first run.\n\n## Requirements\n\n- Python 3.12+\n- [`uv`](https://docs.astral.sh/uv/getting-started/installation/) for dependency management\n- A CUDA-capable GPU (recommended; CPU works but is slow)\n- [SoX](https://github.com/rbouqueau/SoX)\n- [`mpv`](https://mpv.io) or `aplay` (optional, for automatic playback)\n\n## Setup\n\n```bash\n# Clone or download the project, then enter the directory\ncd qwensay\n\n# Install default dependencies\nuv sync\n```\n\nFor Pascal (GTX 10x0 family), do this:\n\n```bash\nuv sync --group torch-pascal --no-group torch-default\n```\n\nOn modern RTX cards, you want to use flash attention:\n\n```bash\nuv sync --extra gpu\n```\n\n\u003e FlashAttention 2 is only used when the model is loaded in `bfloat16` on a CUDA device. The script enables it automatically if the package is present.\n\n## Usage\n\n```\nuv run qwensay.py --text \"Hello world\" [OPTIONS]\n```\n\n### Required arguments\n\n| Argument | Short | Description |\n|---|---|---|\n| `--text` | `-t` | The text to synthesize into speech |\n\n### Optional arguments\n\n| Argument | Short | Default | Description |\n|---|---|---|---|\n| `--instruct` | `-i` | (none) | Natural-language description (e.g., \"A raspy old man\") or style (e.g., \"Whispering\") |\n| `--voice` | `-v` | `Ryan` | Preset speaker name (used for `1.7b-custom` and `0.6b` models) |\n| `--language` | `-l` | `English` | Language: English, Chinese, Japanese, Korean, German, French, Russian, Portuguese, Spanish, Italian |\n| `--output` | `-o` | `outputs/` | Save path. If omitted, plays audio and saves to outputs/ with a timestamp |\n| `--model` | `-m` | *(interactive)* | `1.7b` (Voice Design), `1.7b-custom` (Presets), `0.6b` (Lightweight) |\n| `--device` | | *(auto)* | PyTorch device, e.g. `cuda:0` or `cpu` |\n\n### Choosing a model\n\nIf `--model` is omitted the script presents an interactive prompt. Pass `--model` to skip it.\n\n\n| Key | Hugging Face ID | Best for | VRAM |\n|---|---|---|---|\n| `1.7b` *(default)* | `Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign` | Free-form voice descriptions | ~6 GB |\n| `1.7b-custom` | `Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice` | Preset speakers + style instructions | ~6 GB |\n| `0.6b` | `Qwen/Qwen3-TTS-12Hz-0.6B-Base` | Voice cloning from reference audio | ~2 GB |\n\nModels are downloaded to the Hugging Face cache (`~/.cache/huggingface/`) on first use and reused on subsequent runs.\n\n#### Available preset speakers (`--voice`)\n\nWhen using `1.7b-custom` or `0.6b`, you can choose from these official high-quality timbres:\n\n- Female: `Vivian`, `Serena`, `Ono_Anna`, `Sohee`\n- Male: `Ryan`, `Aiden`, `Uncle_Fu`, `Dylan`, `Eric`\n\n\n## Examples\n\nVoice design. Create a voice entirely from a description using the default 1.7B model.\n\n```bash\nuv run qwensay.py \\\n    --text \"Good morning! Today is going to be a great day.\" \\\n    --voice \"A cheerful, energetic young woman with a clear American accent\"\n```\n\nUsing a premium preset. Use a high-quality preset speaker with a specific emotional instruction.\n\n```bash\nuv run qwensay.py \\\n    --text \"The quick brown fox jumps over the lazy dog.\" \\\n    --voice \"Deep, authoritative male narrator, slow and deliberate pace\" \\\n    --model 1.7b\n```\n\nMultilingual. German text with a matching voice.\n```bash\nuv run qwensay.py \\\n    --text \"Guten Morgen! Wie geht es Ihnen heute?\" \\\n    --voice \"Warm, professional male voice with a standard German accent\" \\\n    --language German\n```\n\n## Notes\n\n- **Output:** If no `--output` is specified, files are saved to the `./outputs/` folder with a timestamp and played automatically via `mpv` or `aplay`.\n- **GTX 10-series Users:** Do not use FlashAttention 2. The script will automatically fall back to \"eager\" mode, which works perfectly on older Pascal cards.\n- **VRAM:** If you experience \"Out of Memory\" errors on 6GB/8GB cards, ensure no other GPU-heavy apps are running, or switch to the `0.6b` model.\n- The **VoiceDesign** model (`1.7b`) gives the most expressive results for arbitrary voice descriptions. Write descriptions in natural language: age, gender, accent, pace, and emotion all influence the output.\n- The **0.6B Base** model is optimized for cloning a voice from a short reference WAV. Passing a `--instruct` description to it works on a best-effort basis.\n- Output is always a 16-bit PCM WAV file at the sample rate returned by the model (typically 24 kHz).\n\n## Alternatives\n\nIf you need a lighter model, you can try Kitten TTS through [puss-say](https://gihub.com/Mic92/puss-say). It runs in the CPU with minimal resources, and the configuration is straightforward. The speech quality is not too bad.\n\n## License\n\nQwen3-TTS model weights are released under the [Apache 2.0 license](https://github.com/QwenLM/Qwen3-TTS/blob/main/LICENSE) by Alibaba Cloud / Qwen Team.\n\nThis project is licensed under GPL-3.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flangurmonkey%2Fqwensay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flangurmonkey%2Fqwensay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flangurmonkey%2Fqwensay/lists"}