dekun 7c50b13c57 Fix TTS synthesis UI stuck on loading state
Enable Gradio queue, immediate pending feedback, segment progress, and gr.update for Audio so long syntheses show logs and playback correctly.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 18:02:34 +08:00

Trading Studio

本地量化交易复盘 → B 站长视频配音生产流水线

Trading Studio 是一套运行在 Ubuntu 物理服务器(RTX 3060 Ti)上的自动化配音系统,专为数字资产量化交易员设计。通过「盲录碎碎念 → 本地 GPU 识别 → 局域网大模型严厉润色 → 本地 GPU 声音克隆」的闭环,高效产出 B 站反思类长视频配音,辅助交易纪律的自我进化。

Git 仓库: https://git.bz121.com/dekun/Trading_Studio.git


系统定位

环节 技术栈 运行位置
碎碎念录音转写 Faster-Whisper (CUDA float16) 本地 3060 Ti
纪律审判式润色 Gemma4 Abliterated @ Ollama 局域网 192.168.8.64
固定音色配音 ChatTTS (CUDA) 本地 3060 Ti
Web 中控 Gradio 端口 5683

架构说明

┌─────────────────────────────────────────────────────────────┐
│                    Gradio 中控 (app.py:5683)                 │
├──────────────┬──────────────────────┬───────────────────────┤
│  音色锁定     │   音频识别            │   润色 + 合成          │
│ tts_service  │  whisper_service     │ llm_service           │
│              │                      │ tts_service           │
└──────┬───────┴──────────┬───────────┴──────────┬────────────┘
       │                  │                      │
       ▼                  ▼                      ▼
  speaker_emb.pt    Faster-Whisper          Ollama HTTP
  (本地持久化)       CUDA / small            192.168.8.64:11434
                                            gemma-4-abliterated

模块解耦

文件 职责
config.py Ollama 地址、模型名、Prompt、路径等全局配置
whisper_service.py Faster-Whisper CUDA 转写
llm_service.py 远程 Ollama HTTP 非流式润色
tts_service.py ChatTTS 音色提取与 wav 合成
app.py Gradio 前端与流程编排

快速开始

完整环境配置请参阅 DEPLOY.md

一键部署(生产环境推荐)

root 用户部署到 /opt/Trading_Studio 并由 PM2 常驻:

sudo -i
git clone https://git.bz121.com/dekun/Trading_Studio.git /opt/Trading_Studio
cd /opt/Trading_Studio
chmod +x deploy.sh
bash deploy.sh

浏览器访问:http://<服务器IP>:5683

首次部署后必做 — 预下载 AI 模型(内网服务器无外网时必需,否则 Whisper 报 Network is unreachable):

cd /opt/Trading_Studio
bash scripts/download_all_models.sh
pm2 restart trading_studio

日常更新(代码已 git push 到远端后,在服务器执行):

cd /opt/Trading_Studio
bash server-update.sh

若更新涉及模型脚本或首次部署,追加:

bash scripts/download_all_models.sh
pm2 restart trading_studio

完整说明见 DEPLOY.md §0.4.2 / §0.8

手动部署(开发调试)

git clone https://git.bz121.com/dekun/Trading_Studio.git /opt/Trading_Studio
cd /opt/Trading_Studio
python3 -m venv venv
source venv/bin/activate
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txt
python app.py

使用流程

配音音色(全部本地 GPU,无需 API)

方式 说明
我的锁定音色 「音色锁定」上传你的人声 → 声音克隆(speaker_emb.pt
预设男/女声 ChatTTS 内置说话人,合成页下拉选择(类似微软音色列表)

首次使用预设音色(服务器执行一次):

bash scripts/generate_voice_presets.sh
pm2 restart trading_studio

首次使用:锁定音色(可选,用于克隆自己的声音)

  1. 进入 「音色锁定」 标签页
  2. 上传 10-30 秒干净人声参考(你的碎碎念盲录样本)
  3. 填写参考音频的精确转写(强烈建议)
  4. 点击 锁定音色 → 生成 speaker_emb.pt

日常生产

方式 A — 分步操作:

  1. 音频极速识别:上传复盘录音 → Whisper 转写
  2. Gemma4 纪律审判:一键润色,生成逻辑清晰、语气严厉的反思稿
  3. ChatTTS 合成:输出 24kHz .wav 成品配音

方式 B — 一键生产:

上传录音后点击 启动全流程,系统自动串联三步。


核心配置(config.py

配置项 默认值
中控端口 56830.0.0.0 局域网可访问)
Ollama 地址 http://192.168.8.64:11434
模型名称 huihui_ai/gemma-4-abliterated:e4b
Whisper 模型 small / CUDA / float16,本地路径 models/whisper/small/
ChatTTS 模型 models/ChatTTS/(须预下载脚本)
HF 镜像 HF_ENDPOINT=https://hf-mirror.com.env 可改)
音色文件 speaker_emb.pt
音频输出 outputs/ 目录

PM2 守护运行

标准路径 /opt/Trading_Studioroot 用户:

# 一键部署 + PM2 启动(推荐)
cd /opt/Trading_Studio && bash deploy.sh

# 或手动 PM2
pm2 start ecosystem.config.js

# 常用管理
pm2 status
pm2 logs trading_studio
bash deploy.sh restart      # 重启
bash deploy.sh update       # 拉代码 + 更新依赖 + 重启
pm2 save && pm2 startup     # 开机自启(deploy.sh 已自动配置)

.gitignore 配置

提交 Git 时请确保忽略以下产物(已在 .gitignore 中预设):

venv/
*.wav
*.pt
*.log
uploads/
outputs/

说明:

  • venv/ — Python 虚拟环境,每台机器独立创建
  • *.wav — 录音与合成音频,体积大且含隐私
  • *.pt — ChatTTS 音色 Embedding 与模型权重
  • *.log — 运行日志

目录结构

Trading_Studio/
├── deploy.sh              # 一键部署脚本(/opt + PM2
├── server-update.sh       # 强制同步远端 main + PM2 重启
├── app.py                 # Gradio 主入口
├── config.py              # 全局配置(Ollama 等请用 .env 覆盖)
├── whisper_service.py     # Whisper CUDA 识别(优先本地模型)
├── llm_service.py         # Ollama 远程润色
├── tts_service.py         # ChatTTS 音色与合成(优先本地模型)
├── scripts/
│   ├── download_all_models.sh      # Whisper + ChatTTS 一键下载
│   ├── download_whisper_models.sh
│   └── download_chattts_models.sh
├── models/                # AI 模型(预下载,不入 Git
│   ├── whisper/small/
│   └── ChatTTS/
├── ecosystem.config.js    # PM2 守护配置
├── requirements.txt       # Python 依赖
├── .env.example           # 服务器本地配置模板 → 复制为 .env
├── README.md              # 本文件
├── DEPLOY.md              # 部署指南(含模型预下载、故障排查)
├── PWA_NPS.md             # HTTPS / NPS 穿透 / 手机麦克风教程
├── .gitignore
├── speaker_emb.pt         # 音色文件(运行时生成,不入库)
├── uploads/               # 上传临时目录
└── outputs/               # 合成 wav 输出

生产标准路径: /opt/Trading_Studio


硬件要求

  • GPU NVIDIA RTX 3060 Ti8GB 显存,建议锁定 120W 功耗墙)
  • 系统: Ubuntu 22.04 / 24.04 LTS
  • CUDA 12.1+(与 PyTorch cu121 匹配)
  • 局域网: 可访问 192.168.8.64:11434 的 Ollama 节点

常见问题

Q: Whisper 报 Network is unreachable
A: 内网服务器无法访问 HuggingFace。执行 bash scripts/download_whisper_models.sh small,确认 models/whisper/small/model.bin 存在后 pm2 restart trading_studio。详见 DEPLOY.md §0.8

Q: Whisper 报 CUDA 错误?
A: 确认 nvidia-smi 正常,且未同时运行其他占显存任务。Whisper 使用 float16 已针对 8GB 优化。可在 .env 设置 WHISPER_MODEL_SIZE=base 并重新下载。

Q: ChatTTS 报 GitHub / 下载超时?
A: 执行 bash scripts/download_chattts_models.sh,或一键 bash scripts/download_all_models.sh

Q: Ollama 连接失败?
A: 在服务器上执行 curl http://192.168.8.64:11434/api/tags 验证连通性,确认模型已 ollama pull。Ollama IP 写在 .envOLLAMA_HOST

Q: 手机显示「找不到麦克风」?
A: http://内网IP:5683 非 HTTPS,浏览器禁用麦克风。请按 PWA_NPS.md 配置 HTTPS 域名,或改用 Web UI 「上传」 录音文件。

Q: TTS 音色不稳定?
A: 重新锁定音色,填写参考音频精确转写,并保持 temperature=0.3 低随机性。

Q: 合成报 Corrupt input data
A: 音色参数格式问题。删除 speaker_emb.pt,重新锁定音色并填写参考音频精确转写。详见 DEPLOY.md §10.5

Q: 合成音频为空或噪声?
A: 检查润色文本长度(过短可能导致异常),确认 speaker_emb.pt 存在且有效。


License

Private — 仅供个人量化交易复盘使用。

S
Description
本地量化语音视频工作流
Readme 716 KiB
Languages
Python 84.6%
Shell 14.3%
JavaScript 1.1%