| name | oumuq-tts-character-creator |
| description | 从中文 Wiki、网页、本地资料、角色设定或参考音频中提取角色人格、语言风格和 TTS 参数,创建或更新 OumuQ 的 voice-references 角色条目。角色 TTS 或声音克隆任务应先把可用参考音频提取到本机私有目录,再按用户选择使用本地或千问克隆;skill、代码和脱敏模板可以发布,但真实 TTS 参考音频不得放到 GitHub 或公网地址。用户要求创建、添加、注册、提取或还原角色,制作中文角色提示词、语音角色、音色克隆配置或对话模式角色时使用。 |
OumuQ 角色提取与 TTS 创建
当前本机策略:仅本地模型
本机已于 2026-07-17 归档所有付费 TTS/ASR API。后文涉及 DashScope、Qwen-TTS-API、云端音色注册、Data URL 提交或公网音频上传的流程均为历史说明,不得执行。角色注册只允许 ONNX-VITS(本机 8764)、Qwen3-TTS(本机 8765)或 IndexTTS2(本机 8766);参考音频必须留在本机。
根据 Wiki、网页或用户资料提炼可执行的中文角色提示词,并把可用且获准私用的参考音频提取到本机私有 voice-references。声音克隆必须以真实本地参考音频为输入;只有另行执行并观察到真实播放时才报告扬声器试听。
输入信息
收集或合理推断:
- 角色名与资料来源:中文 Wiki 链接、网页、本地文档或用户提供的文本。
character_id:稳定的小写英文标识,例如 jp_companion。
name、display_name、display_name_zh。
- 角色性格、语气、情绪范围、称呼、口头禅和对话边界。
speech_language:TTS 实际说出的语言。
visible_language:屏幕显示语言,默认中文。
tts_engine:通常为 Qwen-TTS-API、Qwen3-TTS 或 IndexTTS2。
- 音色来源:本地个人非商业参考音频、已有
api_voice_id、待克隆 URL,或仅占位。
- 写入目标:本机私有
voice-references。skill、代码、测试和脱敏占位模板可以进入公开仓库;真实 TTS 参考音频必须留在本机私有目录。
用户提供角色 Wiki/资料并要求角色 TTS、声音还原、声音克隆或“千问版”时,先提取人格和台词,再把页面中可用且获准私用的参考音频下载到本机私有角色目录。若明确只要文字人格,才省略音频提取。
本地提取、云端克隆与 GitHub 发布边界
“保存到本机”“提交给阿里云百炼做克隆”和“上传到 GitHub”是三件不同的事,必须分别处理,不能把其中一个禁止项扩张到另外两个。
我会先把参考音频提取到本机私有目录,用于参考和克隆;skill 可以提交 GitHub,但真实 TTS 参考音频不会放到 GitHub、公开 URL 或其他公网可访问位置。若使用千问声音克隆,优先把本地样本通过 Data URL 直接提交给阿里云百炼 API,不先公开托管音频。
按目标执行:
- 本地参考音频提取:角色 TTS、声音还原或克隆任务中,只要来源含可用音频且用户说明用于个人非商业用途,就下载到本机私有角色目录,转写并写入
voice-index.json。这是克隆前置步骤,不是 GitHub 发布。
- 声音克隆:用户要求克隆或“千问版”且来源含参考音频时,优先走
qwen-voice-enrollment,从本地样本中选择干净片段提交给阿里云百炼;不得改成 Voice Design 冒充克隆。
- 原创声音设计:只有用户明确要求原创音色时,才可调用
qwen-voice-design;必须说明它不还原原声。
- 仅人格:只有用户明确只要文字人格,或资料确实没有可用音频时,才创建纯文字人格包并报告缺少克隆样本。
- 已有云端音色:用户提供已注册的私有 voice ID 时,只配置该音色,不重新创建。
- GitHub 发布:skill、实现代码、测试和脱敏占位模板可以 stage、commit 或 push;真实 TTS 参考音频、voice ID、签名 URL、密钥和含私有路径的运行产物不得提交。角色文字资料是否发布按用户指定范围和隐私扫描处理,不与音频禁令混为一谈。
用户说“不上传”时必须确认目标或结合上下文判定:如果明确说 GitHub/公网,继续本地提取,并可按已选路线通过百炼 API 直接提交 Data URL,但不得创建公开音频 URL;如果明确说不提交给阿里云百炼,才只保留本地参考音频。不得把任何克隆需求静默降级为 Voice Design。
完成定义
先区分两级完成状态。
独立角色包完成必须满足:
- 已保存规范化来源或 BWIKI 原始提取包。
- 已生成
character-evidence.json 和带证据引用的 character-profile.json。
- 已根据证据写成可执行的中文
README.md,而不是生平摘抄。
- 来源含语音时,
voice-index.json 不为空;可用且允许本机保存的音频已建立私有参考记录。
validate_character.py --character-dir ... --strict --skip-registry 通过。
只有用户明确选择了 TTS 音色路线,才进入“注册并可用的 TTS 角色”阶段,并满足:
- 角色在
reference-index.json 中恰好出现一次,所有路径真实存在。
validate_character.py --workspace ... --strict 通过。
- OumuQ
/api/characters 可见,参数推理能读取 README 与语音索引,路由没有意外绕过动态匹配。
- 用户要求 TTS 验证且 worker 可用时,
verify_tts.py 达到 tts_verified,这只表示 WAV 生成与解码通过。用户要求实际扬声器试听时,还要另行以 play=true 执行并取得可观察播放证据。
Worker 未启动只表示“WAV 验证与实际播放未完成”,不能抹掉已经完成的资料、人格和索引工作;但不得声称音频或扬声器播放已验证。
完成后必须说明创建方式
无论全部完成还是只完成部分阶段,最终都要用中文明确汇报以下字段,不能只说“角色已创建”或“已做千问版”:
- 创建状态:
角色包完成、已注册、已创建云端音色、WAV 已验证、实际播放已验证,或具体未完成项。后二者不得混用。
- 角色与变体:显示名、
character_id;同一角色有本地版和云端版时分别列出。
- 资料来源:只概括来源类型和页面,不泄露私有文件、签名 URL 或音色 ID。
- 服务商与 API:例如“本机本地推理”,或“阿里云百炼 / DashScope”。
- OumuQ 引擎与 worker:例如
IndexTTS2 :8766、Qwen-TTS-API :8767。
- 实际合成模型:必须写真实模型 ID。
Qwen-TTS-API 是 OumuQ worker 名,不等于实际模型名。
- 音色方式:本地零样本参考音频、已有云端音色、Qwen
qwen-voice-design / qwen-voice-enrollment,或 CosyVoice voice-enrollment。
- 语言:参考音频语言、实际语音语言、屏幕语言。
- 验收结果:校验、路由、WAV 生成/解码与实际播放分别是否通过;
queued 不等于 WAV 完成,play=false 不等于实际播放。
- 播放策略:经 OumuQ 播放时准确说明“单一 OumuQ 进程内按提交顺序 FIFO;主机级互斥保证多个进程也不叠音;不宣称跨进程 FIFO 顺序”。若验收请求使用
play=false,只能报告播放策略已验证,不能声称实际扬声器播放已测试。
云端音色 ID、API Key、完整私有路径和签名 URL 只保存到本机私有配置,不出现在可见完成报告中。若实际模型是 cosyvoice-*,必须写“CosyVoice”;只有 qwen3-tts-vc-* / qwen3-tts-vd-* 才分别写“Qwen3-TTS-VC / VD”,不得把 CosyVoice 混称为“千问模型”。
问题复盘与防复发
执行中一旦出现失败、误路由、串角色、叠音、协议差异、音频异常、隐私风险或工具环境问题,修复后必须阅读并更新 排障与防复发清单:
- 写清现象与最小复现,不只记录错误字符串。
- 写清根因、正确做法、验证证据和防复发门禁。
- 只沉淀可复用结论;删除 API Key、voice ID、Data URL、签名 URL、个人路径和真实私聊内容。
- 若只是当前机器偶发现象,记录检测与安全降级,不把个人环境写死进公开 skill。
- 最终回复增加“本次问题沉淀”:列出新增/命中的条目;没有问题也明确写“无新增问题”。
遇到云端 Qwen、动态多角色、串行播放、WAV 解码或 skill 安装问题时,开始操作前先读该清单。修复代码但没有更新清单,任务不算完成。
从 Wiki 或资料提取角色
- 用户提供网页链接时,读取指定页面;角色信息分散时,仅检索必要的相关页面。
- 区分资料中的客观设定、角色原话和推断,避免把同人观点或编辑者描述当作官方设定。
- 优先提取会直接影响对话和语音的特征:
- 核心性格与价值取向。
- 对不同对象的称呼和关系距离。
- 句长、节奏、礼貌程度、常用句式和口头禅。
- 平静、开心、悲伤、生气、紧张等状态下的表达变化。
- 不应说、不应做或不应透露的边界。
- 用中文生成简洁、可执行的角色提示词,不堆砌生平资料。
- 不大段复制受版权保护的 Wiki 或台词;以概括和短例句表达风格。
- 资料不足时明确标记“资料未证实”或使用中性占位,不编造剧情事实。
先用规范化脚本保存一般网页和本地资料:
py -3.10 -X utf8 scripts\extract_sources.py <链接或文件...> --output "<角色目录>\source-bundle.json"
一般资料提取完成后,把正文切成带来源哈希、行号和字符区间的证据:
py -3.10 -X utf8 scripts\prepare_material_evidence.py --source-bundle "<角色目录>\source-bundle.json" --character-dir "<角色目录>" --character-id <id> --backup
随后依据证据 ID 写 character-profile.json 和 README。不要让摘要结论只指向整份文档;尽量引用精确句段。
遇到动态页、反爬或正文缺失时,读取 提取策略 并走完降级链,不能因第一次请求失败就结束。
BWIKI 强制提取流程
遇到 wiki.biligame.com/czn 角色页时,必须先运行:
py -3.10 -X utf8 scripts\extract_bwiki_voice.py --title "<角色名>" --verify-audio-metadata --output "<角色目录>\bwiki-voice-extract.json"
脚本从页面的 voice-player-root data-entries 提取中文、日文、韩文台词和音频 URL。API 被站点防护拦截时,用浏览器打开页面并保存完整渲染 HTML,再运行:
py -3.10 -X utf8 scripts\extract_bwiki_voice.py --title "<角色名>" --html-file "<渲染页.html>" --output "<角色目录>\bwiki-voice-extract.json"
如果页面存在语音区但提取结果为零,任务判定为失败:不得写入空 voice-index.json 并宣称角色创建完成。先完成浏览器渲染页降级提取,再生成角色人格、语音索引和 TTS 配置。
脚本默认使用结构化链路:SMW askargs 获取稳定 combatant_id 与角色档案,再用 expandtemplates 直接展开 Module:Voice/<id>。页面改名时优先用稳定 ID 恢复规范名称;输出必须记录页面与 Voice 模块修订号,并校验 data-total、唯一 ID、data-types 合计和三语覆盖数。
提取成功后生成语音索引和证据包:
py -3.10 -X utf8 scripts\prepare_bwiki_character.py --extract "<角色目录>\bwiki-voice-extract.json" --character-dir "<角色目录>" --character-id <id> --language cn --download --rights-status user-requested-private-use --backup
只有用户明确要求不在本机保存页面音频时才省略 --download,并仍保留台词、语言和来源 URL 元数据;个人非商业克隆任务默认执行本地提取。
库街区声音克隆提取流程
遇到 wiki.kurobbs.com/mc/item/<id> 且用户要求角色 TTS、声音还原、声音克隆或“千问版”时,普通 extract_sources.py 的纯文字结果不算完成。该脚本为公开安全会丢弃 playUrl;克隆流程必须再次读取官方条目接口的角色语音组件,在本机私有目录下载真实音频,并按标题与台词给 voice-index.json 补齐 audio_file。
私有提取结果不得保存 playUrl、创建者或公网媒体地址,只保存本地相对路径、哈希、格式、大小、标题和台词。下载数量必须与角色语音记录数一致,全部 audio_file 必须存在。随后选择约 10 至 20 秒的干净中文 WAV,通过 Qwen3-TTS-VC Data URL 直接提交百炼 API。
中文角色提示词结构
在角色 README.md 中至少写入:
- 角色定位:一句话说明身份和对话用途。
- 核心性格:3 至 6 条稳定特征。
- 语言风格:句式、节奏、用词、礼貌程度和称呼。
- 情绪表现:不同情绪下如何调整表达和 TTS 风格。
- 对话规则:保持角色身份,同时以事实准确和用户安全为优先。
- 禁止事项:不伪造资料、不泄露隐私、不声称真实角色或声优本人发言。
speech_language、visible_language、TTS 引擎和音色状态。
- 资料来源及提取日期,避免复制长段原文。
屏幕文字与语音文字可以不同语言,但必须表达同一含义并保持同一角色口吻。
先按 证据化角色模型 写 character-profile.json。每项人格、语言习惯、称呼和情绪模式必须引用 character-evidence.json 中真实存在的 ID;不要用战斗机制或单条喊声过度推断稳定人格。
文件目标
voice-references/reference-index.json
voice-references/characters/<character_id>/README.md
voice-references/characters/<character_id>/voice-index.json
voice-references/characters/<character_id>/character-evidence.json
voice-references/characters/<character_id>/character-profile.json
voice-references/characters/<character_id>/profile-evidence.json
voice-references/characters/<character_id>/audio/.gitkeep
若只有 voice-references.example,先询问是否创建本机私有副本。公开模板写入 voice-references.example。
创建流程
先完成本地角色包与参考音频提取:
- 只读检查现有
reference-index.json 和角色目录,避免 character_id 冲突;此步骤不得写注册表。
- 创建角色目录和私有
audio/;角色 TTS/克隆任务应把来源中的可用参考音频下载、规范化并保存在这里。
- 将提取出的中文提示词写入
README.md,作为对话模式的主要角色指南。
- 转写本地参考音频并写入非空
voice-index.json,每条记录包含真实 audio_file、准确文本、语言和情绪标签;只有明确只要文字人格或来源没有音频时才使用纯文字索引。
- 校验所有 JSON,并运行
validate_character.py --character-dir ... --strict --skip-registry。
若用户明确只要文字人格,或来源确实没有可用音频,可在 package-only 校验后结束。用户要求角色 TTS、声音还原、克隆或“千问版”时,不得因为“参考音频不上传 GitHub/公网”而停止本地提取、角色注册和后续已选 TTS 路线。
只有用户明确选择了 TTS 音色路线,才继续注册与验证:
- 把待写入角色条目保存为角色目录内的
registry-entry.json。
- 结构化解析并原子更新
reference-index.json 的 characters 数组,禁止用正则替换 JSON。
- OumuQ 正在运行时,刷新或重启后检查
GET /api/characters。
- 仅在用户要求 TTS 验证时,根据角色配置路由 TTS 并生成一条中性中文验证语句;先验证 WAV,实际播放按用户要求另行验证。
显式选择 TTS 路线后,用以下命令原子更新注册表:
py -3.10 -X utf8 scripts\upsert_character.py --workspace "<工作区>" --entry-file "<角色目录>\registry-entry.json" --backup
先用 --dry-run 检查 create/update 行为;脚本会拒绝缺字段、重复 ID、路径越界和不存在的角色目录/索引。
TTS 引擎选择
- 已有固定多说话人 ONNX 声线、优先最低延迟:使用
ONNX-VITS,worker 通常为 http://127.0.0.1:8764。它不读取参考音频、不做零样本克隆,角色条目必须绑定 onnx_vits_speaker 或 onnx_vits_speaker_id。
- 中文本地音色克隆:优先
IndexTTS2,worker 通常为 http://127.0.0.1:8766。
- 日语或多语言本地语音:优先
Qwen3-TTS,worker 通常为 http://127.0.0.1:8765。
- 已有云端音色或本地参考样本:使用
Qwen-TTS-API,worker 通常为 http://127.0.0.1:8767。参考音频不得公开托管时优先 Qwen3-TTS-VC,把本地音频编码成 Data URL 直接提交 API;不要选择必须提供公网 URL 的 CosyVoice 路线。
- OumuQ 路由层通常为
http://127.0.0.1:8780。
通过 tts-router 读取角色注册表并选择引擎。对话模式复用常驻 worker,以本地 HTTP /speak 提交。直接 worker 的 queued 只表示已接收;OumuQ 外层通常返回 HTTP 200,并把真实状态放在 worker_response。生成音频写入工作区缓存或输出目录,不写进 voice-references。
本地动态索引角色优先只传 character_folder、文本和情绪,不在注册表强制注入固定 fallback_prompt_audio,否则会绕过 voice-index.json 的语义/情绪选择。只有 worker 不支持角色目录时才使用固定回退音频。
角色 TTS/克隆任务必须先寻找并提取真实本地参考音频;“不要上传 GitHub/公网”不等于“不要下载到本机”,也不等于“不要通过百炼 API 私下提交 Data URL”。只有来源确实没有音频或用户明确只要文字人格时,才使用纯文字索引并报告无法进行声音克隆。
云端音色注册必须通过 OumuQ 的显式 enroll 流程先完成并原子写入私有注册表。共享 worker 的 /speak 不得在发现缺少音色时临时自动注册:注册可能超过外层超时、产生重复费用、留下孤立音色,而且进程缓存不能代替持久注册表。模型字段以 api_target_model 为规范名;api_clone_target_model 只作为旧数据兼容读取,新增或迁移条目不得只写旧字段。
角色注册表示例
{
"id": "my_character",
"name": "My Character",
"display_name": "My Character",
"display_name_zh": "我的角色",
"character_folder": "voice-references/characters/my_character",
"index_file": "voice-references/characters/my_character/voice-index.json",
"fallback_prompt_audio": "voice-references/characters/my_character/audio/sample.wav",
"tts_engine": "IndexTTS2",
"worker_url": "http://127.0.0.1:8766",
"speech_language": "Chinese",
"visible_language": "Chinese",
"style_summary": "Warm, clear, conversational delivery.",
"style_summary_zh": "温和、清晰、自然,使用中文对话。"
}
音频文件尚不存在时,不写入虚假的 fallback_prompt_audio;可省略该字段或明确标记占位。
本地参考音频
仅使用用户有权使用的参考音频:
[
{
"id": "warm_001",
"audio_file": "voice-references/characters/my_character/audio/warm_001.wav",
"text": "参考音频的准确转写文本。",
"language": "Chinese",
"mood": "warm",
"emotion_tags": ["warm", "clear"],
"emotion_vector": [0.35, 0, 0, 0, 0, 0, 0.02, 0.3],
"match_patterns": ["你好|谢谢|温柔"],
"style_notes": "用户个人非商业用途的本地参考音频。"
}
]
无音频时使用空数组或不含 audio_file 的纯元数据示例。不要臆造文件路径。
云端音色
Qwen-TTS-API 可使用:
{
"api_voice_id": "<仅在本机私有副本中填写>",
"api_clone_audio_path": "<仅在本机私有配置中填写参考音频路径>",
"api_target_model": "<与注册模型一致的 qwen3-tts-vc-* 模型>",
"api_clone_language_hint": "zh",
"api_voice_instructions": "使用自然的中文对话语气,表达温和、清晰,保持角色设定。",
"send_instructions_by_default": false
}
声音克隆参考样本门禁
生产音色注册前必须满足以下条件;任一项不满足时停止注册并继续找样本,不得用“接口接受了”代替素材合格:
- 使用一段连续录制、同一说话者、同一语言、同一场景的 10 至 20 秒音频。中文克隆只使用中文样本;除非用户明确要求并确认跨语言克隆,否则不得混入日语、韩语或其他语言。
- 优先选择自然、稳定的日常对话。排除喊叫、耳语、哭腔、笑声、战斗爆发、强烈角色表演、背景音乐、音效、混响和多人重叠。
- 默认禁止把多条台词、不同场景或不同情绪片段拼成一个克隆样本。只允许对单段连续录音做首尾静音裁剪、单声道转换、重采样和保守增益调整。
api_clone_reference_text 必须是对参考音频逐字核验的同语言转写,并在 reference_audio_source 记录 continuous_recording: true、language、transcript_verified: true 和核验方法。Wiki 台词、ASR 结果或字幕只能作为草稿,未经人工听审对齐不得提交。
- 不能可靠取得逐字文本时,保持为候选素材并停止生产注册;不得通过删除参考文本来绕过 WER 或服务端质量检查。
使用确定性检查脚本阻止明显不合格的样本:
py -3.10 -X utf8 scripts\validate_clone_sample.py --workspace "<工作区>" --entry-file "<候选角色条目>" --expected-language zh
验证器只检查时长、声道、峰值、静音比例、语言元数据、连续录音声明和逐字转写声明;它不能代替人工听审。
新克隆先注册为独立候选变体,例如 <id>_qwen_candidate_<date>,不得直接覆盖当前生产角色。服务商响应出现 fallback_mode=true、非空 fallback_reason、WER 降级或预处理警告时立即判失败。没有警告也只代表“注册候选成功”,不代表音色稳定。
候选音色至少生成短句、普通句、长句和一条角色代表性情绪句,与当前版本做 A/B 听审。只有用户明确确认候选更稳定后,才把生产角色绑定切换到候选音色;WAV 可解码、模型匹配和时长正常都不能替代听感确认。
Qwen3-TTS-VC 由受控脚本把本地文件编码为 Data URL 后直接提交,不需要公开 URL;在“参考音频不得上传公网”的边界下不要改走必须公开托管音频的 CosyVoice 路线。
真正的阿里云千问云端音色有两种方式;它们都不是仅提供 Wiki 链接时的默认动作:
- 只有用户明确要求原创音色时,才使用 Qwen 声音设计:仅根据人格和语言风格生成原创音色,不提交参考音频。必须提前说明它不会还原角色原声。
{
"tts_engine": "Qwen-TTS-API",
"tts_provider": "Alibaba Cloud Model Studio (DashScope)",
"api_voice_creation_method": "voice_design",
"api_enrollment_model": "qwen-voice-design",
"api_target_model": "qwen3-tts-vd-2026-01-26",
"api_voice_design_language": "zh",
"voice_mode": "cloud-voice-design"
}
api_voice_prompt 要描述年龄感、音高、明暗、质感、节奏、力度、情绪范围和应避免的风格,不写“模仿某声优/某角色原声”。api_voice_preview_text 使用原创短句。
- 用户说明个人非商业用途并要求千问声音克隆时,先通过声音克隆参考样本门禁,再使用
qwen-voice-enrollment;把本地样本以 Data URL 直接提交给阿里云百炼,不先上传到 GitHub、公开对象存储或公网 URL。注册与合成必须使用完全相同的 Qwen3-TTS-VC 模型:
{
"tts_engine": "Qwen-TTS-API",
"tts_provider": "Alibaba Cloud Model Studio (DashScope)",
"api_voice_creation_method": "voice_cloning",
"api_enrollment_model": "qwen-voice-enrollment",
"api_target_model": "qwen3-tts-vc-2026-01-22",
"api_clone_language_hint": "zh",
"voice_mode": "cloud-voice-clone"
}
Qwen3-TTS-VC 支持把本地个人非商业参考 WAV 作为 Base64 Data URL 提交;不要把 Data URL、返回的 voice 值或原始响应写入公开仓库。参考音频不得公开托管时不要改用需要公网 URL 的 CosyVoice;若用户另行选择 CosyVoice,完成报告必须明确实际模型。
同一人格同时保留本地版和云端版时,不覆盖原角色。保留原 character_id,为云端变体使用稳定 ID(例如 <id>_qwen),两个注册条目可以复用同一 character_folder、证据和 voice-index.json;显示名要能区分版本。云端条目不得携带本地 fallback_prompt_audio。
TTS WAV 与可选播放验证
本节不是 package-only 的默认步骤。只有用户已明确选择 TTS 音色路线并明确要求 TTS 验证时才执行;否则跳过本节,不提交请求、不生成 WAV。
- 检查角色条目、worker URL、语言和音频路径。
- 选择不含剧透、隐私和长篇版权台词的原创测试集,至少包含短句、普通句、长句和角色代表性情绪句。
- 克隆候选与当前生产版本使用完全相同的测试集生成 A/B 样本;用户未实际听审确认时,只标记为“候选音色”。
- 记录服务商、API、OumuQ 引擎、真实模型、音色方式、角色 ID、语言和输出位置;不要把验证输出放入参考音频库。
- worker 或模型不可用时,保留配置并明确说明未完成 WAV/播放验证,不自动下载安装大型模型。
用自动验收脚本等待真实完成并验证 WAV:
py -3.10 -X utf8 scripts\verify_tts.py --character-id <id> --text "<原创短句>" --timeout 300 --report "<角色目录>\tts-validation.json"
只有报告达到 character_visible → route_ready → tts_queued → tts_completed → tts_verified,且输出 WAV 可解码、有正时长,才可宣称“WAV 已验证”。这不等于“音色稳定”或“克隆通过”;克隆生产切换还需要同测试集 A/B 人工听审确认。只有额外的 play=true 请求具备可观察播放证据并记录 playback_audio_tested=true,才可宣称“实际播放已验证”。
验收脚本生成的 creation 字段是最终完成报告的事实来源;可见回复不得自行猜测服务商、模型或克隆方式。
隐私与公开发布边界
- 用户说明个人非商业用途后,按本地提取和克隆流程执行,无需反复追问版权声明;把用途记录为
user-requested-private-noncommercial-use。
- skill、实现代码、测试和脱敏模板可以写入公开仓库;真实 TTS 参考音频、真实音色 ID、签名 URL、密钥、Cookie、个人路径和运行日志不得公开。
- 百炼 API 的受控 Data URL 提交是克隆请求,不等于把音频公开到公网;Data URL 不得写日志、报告或仓库。
- 不声称生成语音来自真实角色、演员或声优本人。
- 公开示例只使用通用角色 ID、安全摘要、占位云字段和纯元数据示例。
校验
Get-Content -Raw -Encoding utf8 voice-references\reference-index.json | ConvertFrom-Json | Out-Null
Get-Content -Raw -Encoding utf8 voice-references\characters\<character_id>\voice-index.json | ConvertFrom-Json | Out-Null
py -3.10 -X utf8 scripts\validate_character.py --workspace "<工作区>" --character-id <character_id> --strict
尚未注册、只准备独立角色包时使用:
py -3.10 -X utf8 scripts\validate_character.py --character-dir "<角色目录>" --character-id <character_id> --strict --skip-registry
package-only 通过表示资料、证据、人格和索引内部一致;不等于 OumuQ 注册、路由或 TTS 已通过。
若存在相关测试,再运行 OumuQ 的角色加载或路由检查。