
Alicloud Ai Audio Cosyvoice Voice Design
- 96 installs
- 396 repo stars
- Updated July 18, 2026
- cinience/alicloud-skills
Creates custom designed voices via Alibaba Cloud Model Studio CosyVoice enrollment from a voice prompt and preview text, returning a voice_id for TTS.
About
Uses the CosyVoice voice-enrollment API to design custom voices from a natural-language description and preview text. A developer uses it to mint a voice_id before running text-to-speech.
- Uses model voice-enrollment with cosyvoice target_model variants
- Defaults to cosyvoice-v3.5-plus
Alicloud Ai Audio Cosyvoice Voice Design by the numbers
- 96 all-time installs (skills.sh)
- Ranked #4,561 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/cinience/alicloud-skills --skill alicloud-ai-audio-cosyvoice-voice-designAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 96 |
|---|---|
| repo stars | ★ 396 |
| Last updated | July 18, 2026 |
| Repository | cinience/alicloud-skills ↗ |
What it does
Creates custom designed voices via Alibaba Cloud Model Studio CosyVoice enrollment from a voice prompt and preview text, returning a voice_id for TTS.
Files
Category: provider
Model Studio CosyVoice Voice Design
Use the CosyVoice voice enrollment API to create designed voices from a natural-language voice description.
Critical model names
Use model="voice-enrollment" and one of these target_model values:
cosyvoice-v3.5-pluscosyvoice-v3.5-flashcosyvoice-v3-pluscosyvoice-v3-flash
Recommended default in this repo:
target_model="cosyvoice-v3.5-plus"
Region and compatibility
cosyvoice-v3.5-plusandcosyvoice-v3.5-flashare available only in China mainland deployment mode (Beijing endpoint).- In international deployment mode (Singapore endpoint),
cosyvoice-v3-plusandcosyvoice-v3-flashdo not support voice clone/design. - The
target_modelmust match the later speech synthesis model.
Endpoint
- Domestic:
https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization - International:
https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization
Prerequisites
- Set
DASHSCOPE_API_KEYin your environment, or adddashscope_api_keyto~/.alibabacloud/credentials.
Normalized interface (cosyvoice.voice_design)
Request
model(string, optional): fixed tovoice-enrollmenttarget_model(string, optional): defaultcosyvoice-v3.5-plusprefix(string, required): letters/digits only, max 10 charsvoice_prompt(string, required): max 500 chars, Chinese or English onlypreview_text(string, required): max 200 chars, Chinese or Englishlanguage_hints(array[string], optional):zhoren, and should matchpreview_textsample_rate(int, optional): e.g.24000response_format(string, optional): e.g.wav
Response
voice_id(string)request_id(string)status(string, optional)
Operational guidance
- Keep
voice_promptconcrete: timbre, age range, pace, emotion, articulation, and scenario. - If
language_hintsis used, it should match the language ofpreview_text. - Designed voice names include a
-vd-marker in the generated backend naming convention.
Local helper script
Prepare a normalized request JSON:
python skills/ai/audio/alicloud-ai-audio-cosyvoice-voice-design/scripts/prepare_cosyvoice_design_request.py \
--target-model cosyvoice-v3.5-plus \
--prefix announcer \
--voice-prompt "沉稳的中年男性播音员,低沉有磁性,语速平稳,吐字清晰。" \
--preview-text "各位听众朋友,大家好,欢迎收听晚间新闻。" \
--language-hint zhValidation
mkdir -p output/alicloud-ai-audio-cosyvoice-voice-design
for f in skills/ai/audio/alicloud-ai-audio-cosyvoice-voice-design/scripts/*.py; do
python3 -m py_compile "$f"
done
echo "py_compile_ok" > output/alicloud-ai-audio-cosyvoice-voice-design/validate.txtPass criteria: command exits 0 and output/alicloud-ai-audio-cosyvoice-voice-design/validate.txt is generated.
Output And Evidence
- Save artifacts, command outputs, and API response summaries under
output/alicloud-ai-audio-cosyvoice-voice-design/. - Include
target_model,prefix,voice_prompt, andpreview_textin the evidence file.
References
references/api_reference.mdreferences/sources.md
interface:
display_name: "Alibaba Cloud AI Audio CosyVoice Voice Design"
short_description: "CosyVoice custom voice design from prompt text"
default_prompt: "Use $alicloud-ai-audio-cosyvoice-voice-design to complete this ai/audio CosyVoice voice design task on Alibaba Cloud."
{
"skill_name": "alicloud-ai-audio-cosyvoice-voice-design",
"evals": [
{
"id": 1,
"prompt": "用阿里云百炼的 CosyVoice 做一个新音色,目标模型 cosyvoice-v3.5-plus,前缀 announcer,音色描述是“沉稳的中年男性播音员,低沉有磁性,语速平稳,吐字清晰”,试听文案是“各位听众朋友,大家好,欢迎收听晚间新闻”。请直接给我请求 JSON。",
"expected_output": "Produces a valid voice design enrollment request with voice_prompt, preview_text, prefix, and target_model for cosyvoice-v3.5-plus.",
"files": [],
"expectations": [
"The output uses model \"voice-enrollment\".",
"The output includes voice_prompt.",
"The output includes preview_text.",
"The output sets target_model to cosyvoice-v3.5-plus."
]
},
{
"id": 2,
"prompt": "我要设计一个英文产品介绍音色,prefix 叫 demo01,模型 cosyvoice-v3.5-plus,voice prompt 是 'A warm female product narrator with clear articulation and medium pace.',preview text 是 'Welcome to our spring product launch.'。帮我生成最小可用请求,并提醒 language_hints 怎么配。",
"expected_output": "Produces an English voice design request and explains that language_hints should match the language of preview_text.",
"files": [],
"expectations": [
"The request includes prefix demo01.",
"The request includes the English voice_prompt and preview_text.",
"The answer explains that language_hints should match preview_text language."
]
},
{
"id": 3,
"prompt": "帮我做一个 CosyVoice 声音设计模板,模型 cosyvoice-v3.5-plus,prefix stage8,voice prompt 是“年轻活泼的女性活动主持人,语气热情,节奏稍快”,preview text 是“欢迎来到今晚的新品发布会”,输出格式 wav,采样率 24000。",
"expected_output": "Produces a voice design request with parameters.sample_rate=24000 and parameters.response_format=wav.",
"files": [],
"expectations": [
"The request contains parameters.sample_rate set to 24000.",
"The request contains parameters.response_format set to wav.",
"The request includes both voice_prompt and preview_text."
]
}
]
}
CosyVoice Voice Design API Reference
Endpoint
- Domestic:
POST https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization - International:
POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization
Minimal request body
{
"model": "voice-enrollment",
"input": {
"action": "create_voice",
"target_model": "cosyvoice-v3.5-plus",
"voice_prompt": "沉稳的中年男性播音员,音色低沉浑厚,富有磁性,语速平稳,吐字清晰。",
"preview_text": "各位听众朋友,大家好,欢迎收听晚间新闻。",
"prefix": "announcer",
"language_hints": ["zh"]
},
"parameters": {
"sample_rate": 24000,
"response_format": "wav"
}
}Important notes
voice_promptis required in design mode and supports only Chinese or English.preview_textis required in design mode and supports Chinese or English.- If
language_hintsis used, it should match the language ofpreview_text. prefixmust be up to 10 letters/digits.
Response
The service returns a voice_id that can be used later in the TTS API.
Sources
- https://www.alibabacloud.com/help/zh/model-studio/cosyvoice-clone-design-api
- https://www.alibabacloud.com/help/en/model-studio/cosyvoice-clone-design-api
#!/usr/bin/env python3
"""Prepare and optionally validate a CosyVoice design enrollment request."""
from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
def _load_json(path: str) -> dict:
return json.loads(Path(path).read_text(encoding="utf-8"))
def main() -> None:
parser = argparse.ArgumentParser(description="Prepare CosyVoice voice design request")
parser.add_argument("--target-model", default="cosyvoice-v3.5-plus")
parser.add_argument("--prefix", required=True)
parser.add_argument("--voice-prompt", required=True)
parser.add_argument("--preview-text", required=True)
parser.add_argument("--language-hint", default="zh")
parser.add_argument("--sample-rate", type=int, default=24000)
parser.add_argument("--response-format", default="wav")
parser.add_argument(
"--output",
default="output/alicloud-ai-audio-cosyvoice-voice-design/request.json",
)
parser.add_argument("--validate-response", help="Path to a JSON response to validate")
args = parser.parse_args()
request = {
"model": "voice-enrollment",
"input": {
"action": "create_voice",
"target_model": args.target_model,
"voice_prompt": args.voice_prompt,
"preview_text": args.preview_text,
"prefix": args.prefix,
"language_hints": [args.language_hint],
},
"parameters": {
"sample_rate": args.sample_rate,
"response_format": args.response_format,
},
}
out = Path(args.output)
out.parent.mkdir(parents=True, exist_ok=True)
out.write_text(json.dumps(request, ensure_ascii=False, indent=2), encoding="utf-8")
result = {"ok": True, "request_path": str(out)}
if args.validate_response:
response = _load_json(args.validate_response)
voice_id = ((response.get("output") or {}).get("voice_id"))
if not voice_id:
print(json.dumps({"ok": False, "error": "missing output.voice_id"}, ensure_ascii=False))
sys.exit(1)
result["response_valid"] = True
print(json.dumps(result, ensure_ascii=False))
if __name__ == "__main__":
main()