dekun d26bec085c Fix layout width when voice accordion collapses
Lock gradio-container to 1800px on desktop, stretch outer flex instead of center-shrink, and move voice accordion to its own full-width row.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-12 19:49:33 +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%