chore: clean up redundant files and add project dependencies
Browse filesRemoved files:
- README-HF.md: Redundant HF Spaces documentation (info in CLAUDE.md)
- UI_IMPROVEMENTS.md: Superseded by UX_IMPROVEMENTS_V2.md
Added files:
- .env.example: Environment variable template for developers
- .python-version: Python version specification for pyenv
- uv.lock: UV dependency lock file for reproducible builds
This cleanup removes duplicate documentation while preserving essential
development configuration files.
- .env.example +21 -0
- .python-version +1 -0
- README-HF.md +0 -64
- UI_IMPROVEMENTS.md +0 -206
- uv.lock +0 -0
.env.example
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 環境變數範例檔案
|
| 2 |
+
# 複製此檔案為 .env 並填入實際值
|
| 3 |
+
|
| 4 |
+
# 後端配置
|
| 5 |
+
MODEL_PATH=/app/models/Qwen3-TTS-12Hz-1.7B-Base
|
| 6 |
+
UPLOAD_DIR=/app/backend/uploads
|
| 7 |
+
OUTPUT_DIR=/app/backend/outputs
|
| 8 |
+
|
| 9 |
+
# CORS 允許的來源(多個用逗號分隔)
|
| 10 |
+
CORS_ORIGINS=http://localhost:3000,http://localhost
|
| 11 |
+
|
| 12 |
+
# 前端配置
|
| 13 |
+
VITE_API_URL=http://localhost:8000
|
| 14 |
+
|
| 15 |
+
# 部署配置(Render 或其他平台)
|
| 16 |
+
# 如果部署到 Render,取消註解並設置正確的 URL
|
| 17 |
+
# CORS_ORIGINS=https://your-frontend.onrender.com
|
| 18 |
+
# VITE_API_URL=https://your-backend.onrender.com
|
| 19 |
+
|
| 20 |
+
# CPU 模式(如果沒有 GPU 支援)
|
| 21 |
+
USE_CPU=false
|
.python-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
3.12
|
README-HF.md
DELETED
|
@@ -1,64 +0,0 @@
|
|
| 1 |
-
---
|
| 2 |
-
title: Qwen3-TTS Voice Clone
|
| 3 |
-
emoji: 🎤
|
| 4 |
-
colorFrom: blue
|
| 5 |
-
colorTo: purple
|
| 6 |
-
sdk: docker
|
| 7 |
-
pinned: false
|
| 8 |
-
license: apache-2.0
|
| 9 |
-
---
|
| 10 |
-
|
| 11 |
-
# 🎤 Qwen3-TTS 語音複製
|
| 12 |
-
|
| 13 |
-
基於 Qwen3-TTS-12Hz-1.7B-Base 的全功能語音複製應用。
|
| 14 |
-
|
| 15 |
-
## ✨ 功能特色
|
| 16 |
-
|
| 17 |
-
- 🎯 **3秒快速複製**: 僅需 3-10 秒參考音訊
|
| 18 |
-
- 🌏 **多語言支持**: 中、英、日、韓等 10 種語言
|
| 19 |
-
- 🎨 **高相似度**: 聲音相似度可達 95%
|
| 20 |
-
- 💻 **完整 Web UI**: React 前端 + FastAPI 後端
|
| 21 |
-
- 🚀 **即開即用**: 模型自動下載
|
| 22 |
-
|
| 23 |
-
## 🚀 使用方法
|
| 24 |
-
|
| 25 |
-
1. 上傳 3-10 秒的參考音訊(清晰人聲)
|
| 26 |
-
2. 輸入參考音訊的逐字稿
|
| 27 |
-
3. 輸入想要生成的目標文字
|
| 28 |
-
4. 選擇語言
|
| 29 |
-
5. 點擊「複製並生成」
|
| 30 |
-
|
| 31 |
-
## 📊 效能說明
|
| 32 |
-
|
| 33 |
-
- **CPU 模式**: 10-20 秒/次
|
| 34 |
-
- **記憶體**: 約 8-12GB
|
| 35 |
-
- **模型大小**: 4.3GB
|
| 36 |
-
|
| 37 |
-
## 🛠️ 技術棧
|
| 38 |
-
|
| 39 |
-
- **前端**: React + TypeScript + Tailwind CSS
|
| 40 |
-
- **後端**: FastAPI + Python
|
| 41 |
-
- **模型**: Qwen3-TTS-12Hz-1.7B-Base
|
| 42 |
-
- **部署**: Docker
|
| 43 |
-
|
| 44 |
-
## 📝 本地運行
|
| 45 |
-
|
| 46 |
-
```bash
|
| 47 |
-
# Clone 項目
|
| 48 |
-
git clone https://huggingface.co/spaces/你的用戶名/qwen3-tts-clone
|
| 49 |
-
cd qwen3-tts-clone
|
| 50 |
-
|
| 51 |
-
# 使用 Docker
|
| 52 |
-
docker build -f Dockerfile.huggingface -t qwen3-tts .
|
| 53 |
-
docker run -p 7860:7860 qwen3-tts
|
| 54 |
-
```
|
| 55 |
-
|
| 56 |
-
訪問: http://localhost:7860
|
| 57 |
-
|
| 58 |
-
## 🤝 貢獻
|
| 59 |
-
|
| 60 |
-
基於 [Qwen3-TTS](https://github.com/QwenLM/Qwen3-TTS) by Alibaba Qwen Team
|
| 61 |
-
|
| 62 |
-
## 📄 授權
|
| 63 |
-
|
| 64 |
-
Apache 2.0 License
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UI_IMPROVEMENTS.md
DELETED
|
@@ -1,206 +0,0 @@
|
|
| 1 |
-
# UI/UX 專業化改進總結
|
| 2 |
-
|
| 3 |
-
## 改進概述
|
| 4 |
-
|
| 5 |
-
根據 UI/UX Pro Max 設計系統建議,對 Qwen3-TTS 語音複製應用進行了全面的專業化改進。
|
| 6 |
-
|
| 7 |
-
## 設計系統規格
|
| 8 |
-
|
| 9 |
-
### 色彩配置
|
| 10 |
-
- **Primary**: `#6366f1` (Indigo)
|
| 11 |
-
- **Secondary**: `#312E81` (Deep Indigo)
|
| 12 |
-
- **Accent**: `#F97316` (Warm Orange)
|
| 13 |
-
- **Background**: `#0F0F23` (Dark Audio)
|
| 14 |
-
- **Text**: `#F8FAFC` (High contrast white)
|
| 15 |
-
|
| 16 |
-
### 字體
|
| 17 |
-
- **主要字體**: Poppins (標題、按鈕)
|
| 18 |
-
- **次要字體**: Open Sans (正文)
|
| 19 |
-
- 字體配對適合現代、專業、清晰的企業風格
|
| 20 |
-
|
| 21 |
-
### 設計風格
|
| 22 |
-
- **Pattern**: Interactive Demo + Feature-Rich
|
| 23 |
-
- **Style**: Micro-interactions (小動畫、觸覺反饋、響應式互動)
|
| 24 |
-
- **Performance**: ⚡ 優秀
|
| 25 |
-
- **Accessibility**: ✓ 良好
|
| 26 |
-
|
| 27 |
-
## 具體改進項目
|
| 28 |
-
|
| 29 |
-
### 1. 移除所有表情符號 (Emoji)
|
| 30 |
-
**改進前**: ❌ ✓ 等表情符號用作狀態指示器
|
| 31 |
-
**改進後**: 使用專業的 SVG 圖示 (Lucide React)
|
| 32 |
-
|
| 33 |
-
**影響檔案**:
|
| 34 |
-
- `frontend/src/App.tsx` (所有狀態訊息)
|
| 35 |
-
|
| 36 |
-
### 2. 添加專業互動效果
|
| 37 |
-
|
| 38 |
-
#### 按鈕與可點擊元素
|
| 39 |
-
- ✅ 所有按鈕添加 `cursor-pointer`
|
| 40 |
-
- ✅ Hover 狀態使用 `transform: scale()` 和 `box-shadow` 增強
|
| 41 |
-
- ✅ 平滑過渡動畫 (`transition-all duration-200`)
|
| 42 |
-
- ✅ Focus states 可見性 (鍵盤導航支援)
|
| 43 |
-
|
| 44 |
-
#### 表單元素
|
| 45 |
-
- ✅ Input/Textarea 添加 focus ring (`focus:ring-2 focus:ring-brand-primary/20`)
|
| 46 |
-
- ✅ Hover 狀態邊框顏色變化
|
| 47 |
-
- ✅ Disabled 狀態視覺反饋
|
| 48 |
-
|
| 49 |
-
#### 上傳區域
|
| 50 |
-
- ✅ 拖放區域 hover 效果 (背景色 + 邊框色)
|
| 51 |
-
- ✅ 圖示包裹在圓形背景中提升視覺層次
|
| 52 |
-
- ✅ 添加 ARIA 標籤提升無障礙性
|
| 53 |
-
|
| 54 |
-
### 3. 視覺層次優化
|
| 55 |
-
|
| 56 |
-
#### 區塊標題
|
| 57 |
-
- **改進前**: 單色背景 + 圖示
|
| 58 |
-
- **改進後**: 漸層背景 (`from-brand-primary to-brand-secondary`) + 圖示在圓形容器內
|
| 59 |
-
|
| 60 |
-
#### 卡片與容器
|
| 61 |
-
- 添加細微陰影 (`shadow-sm`)
|
| 62 |
-
- 更清晰的間距與內距
|
| 63 |
-
- 統一圓角半徑 (`rounded-lg`)
|
| 64 |
-
|
| 65 |
-
### 4. 狀態反饋改進
|
| 66 |
-
|
| 67 |
-
#### 狀態訊息
|
| 68 |
-
- **Info**: 藍色背景 + 邊框 (`bg-brand-primary/10 border-brand-primary/30`)
|
| 69 |
-
- **Success**: 綠色背景 + 邊框 (`bg-green-500/10 border-green-500/30`)
|
| 70 |
-
- **Error**: 紅色背景 + 邊框 (`bg-red-500/10 border-red-500/30`)
|
| 71 |
-
- 圖示與文字顏色對應狀態類型
|
| 72 |
-
|
| 73 |
-
#### 上傳成功狀態
|
| 74 |
-
- 添加圓形綠色背景包裹勾選圖示
|
| 75 |
-
- 顯示「點擊以重新上傳」提示
|
| 76 |
-
|
| 77 |
-
#### 空狀態設計
|
| 78 |
-
- 生成音訊區域添加圖示圓形背景
|
| 79 |
-
- 顯示「尚無生成的音訊」文字說明
|
| 80 |
-
|
| 81 |
-
### 5. 微互動 (Micro-interactions)
|
| 82 |
-
|
| 83 |
-
#### 動畫效果
|
| 84 |
-
- Hero section badge 脈衝動畫 (`animate-pulse`)
|
| 85 |
-
- 按鈕 hover 放大效果 (`scale-[1.02]`)
|
| 86 |
-
- 陰影增強效果 (hover 時)
|
| 87 |
-
- Loading spinner 旋轉動畫
|
| 88 |
-
|
| 89 |
-
#### 過渡時間
|
| 90 |
-
- 150-300ms 用於微互動 (符合 UX 最佳實踐)
|
| 91 |
-
- 所有過渡使用 `ease-out` 緩動函數
|
| 92 |
-
|
| 93 |
-
### 6. 無障礙性改進
|
| 94 |
-
|
| 95 |
-
#### ARIA 標籤
|
| 96 |
-
- ✅ 上傳區域: `aria-label="上傳參考音訊檔案"`
|
| 97 |
-
- ✅ 表單元素: `aria-label` 屬性
|
| 98 |
-
- ✅ 按鈕: `aria-label` 描述功能
|
| 99 |
-
|
| 100 |
-
#### 鍵盤導航
|
| 101 |
-
- ✅ 所有互動元素可透過 Tab 鍵導航
|
| 102 |
-
- ✅ Focus ring 可見 (`focus:ring-2`)
|
| 103 |
-
- ✅ Checkbox 使用語義化 `<label>` 與隱藏 `<input>`
|
| 104 |
-
|
| 105 |
-
#### 語義化 HTML
|
| 106 |
-
- 上傳區域使用 `role="button"` 和 `tabIndex={0}`
|
| 107 |
-
- Audio 元素包含原生控制項
|
| 108 |
-
|
| 109 |
-
### 7. 響應式設計
|
| 110 |
-
|
| 111 |
-
#### 斷點
|
| 112 |
-
- Mobile-first 設計方法
|
| 113 |
-
- 測試於 375px, 768px, 1024px, 1440px
|
| 114 |
-
|
| 115 |
-
#### 間距
|
| 116 |
-
- 響應式內距: `px-6 md:px-12 lg:px-24`
|
| 117 |
-
- 響應式字體: `text-5xl md:text-6xl`
|
| 118 |
-
|
| 119 |
-
## 技術實現
|
| 120 |
-
|
| 121 |
-
### 檔案修改清單
|
| 122 |
-
|
| 123 |
-
1. **frontend/src/App.tsx**
|
| 124 |
-
- 移除所有 emoji
|
| 125 |
-
- 添加互動狀態與過渡動畫
|
| 126 |
-
- 改進 ARIA 標籤與無障礙性
|
| 127 |
-
- 優化視覺層次
|
| 128 |
-
|
| 129 |
-
2. **frontend/tailwind.config.js**
|
| 130 |
-
- 更新色彩配置 (符合設計系統)
|
| 131 |
-
- 添加 Poppins 與 Open Sans 字體
|
| 132 |
-
- 添加 brand.accent 色彩
|
| 133 |
-
|
| 134 |
-
3. **frontend/index.html**
|
| 135 |
-
- 更新 Google Fonts 引用
|
| 136 |
-
- 添加 Poppins 與 Open Sans 字體載入
|
| 137 |
-
|
| 138 |
-
## 效能優化
|
| 139 |
-
|
| 140 |
-
### CSS 優化
|
| 141 |
-
- 使用 `transform` 和 `opacity` 進行動畫 (GPU 加速)
|
| 142 |
-
- 避免使用 `width/height/top/left` 動畫
|
| 143 |
-
- 過渡時間控制在 150-300ms
|
| 144 |
-
|
| 145 |
-
### 字體載入
|
| 146 |
-
- 使用 `preconnect` 加速 Google Fonts
|
| 147 |
-
- `display=swap` 避免字體載入閃爍
|
| 148 |
-
|
| 149 |
-
## 前後對比
|
| 150 |
-
|
| 151 |
-
### 改進前問題
|
| 152 |
-
❌ 使用 emoji (❌ ✓) 作為 UI 元素 - 不專業
|
| 153 |
-
❌ 缺少互動反饋 (hover, focus states)
|
| 154 |
-
❌ 視覺層次不明確
|
| 155 |
-
❌ 缺少無障礙性支援
|
| 156 |
-
❌ 狀態訊息設計簡陋
|
| 157 |
-
|
| 158 |
-
### 改進後優勢
|
| 159 |
-
✅ 專業的 SVG 圖示系統
|
| 160 |
-
✅ 完整的互動反饋與微動畫
|
| 161 |
-
✅ 清晰的視覺層次與色彩系統
|
| 162 |
-
✅ 完整的 ARIA 標籤與鍵盤導航
|
| 163 |
-
✅ 專業的狀態反饋設計
|
| 164 |
-
|
| 165 |
-
## 設計檢查清單
|
| 166 |
-
|
| 167 |
-
根據 UI/UX Pro Max 交付前檢查清單:
|
| 168 |
-
|
| 169 |
-
### 視覺品質
|
| 170 |
-
- [x] 無 emoji 作為圖示 (使用 SVG)
|
| 171 |
-
- [x] 所有圖示來自一致的圖示集 (Lucide React)
|
| 172 |
-
- [x] Hover 狀態不造成版面移位
|
| 173 |
-
- [x] 使用主題色彩直接套用
|
| 174 |
-
|
| 175 |
-
### 互���
|
| 176 |
-
- [x] 所有可點擊元素有 `cursor-pointer`
|
| 177 |
-
- [x] Hover 狀態提供清晰視覺反饋
|
| 178 |
-
- [x] 過渡動畫平滑 (150-300ms)
|
| 179 |
-
- [x] Focus 狀態鍵盤導航可見
|
| 180 |
-
|
| 181 |
-
### 版面
|
| 182 |
-
- [x] 浮動元素與邊緣有適當間距
|
| 183 |
-
- [x] 無內容被固定導航列遮蔽
|
| 184 |
-
- [x] 響應式於 375px, 768px, 1024px, 1440px
|
| 185 |
-
- [x] 行動裝置無水平捲動
|
| 186 |
-
|
| 187 |
-
### 無障礙性
|
| 188 |
-
- [x] 所有圖片有 alt 文字
|
| 189 |
-
- [x] 表單輸入有標籤
|
| 190 |
-
- [x] 顏色非唯一指示器
|
| 191 |
-
- [x] 尊重 `prefers-reduced-motion`
|
| 192 |
-
|
| 193 |
-
## 建議下一步
|
| 194 |
-
|
| 195 |
-
1. **性能監控**: 使用 Lighthouse 測試效能與無障礙性評分
|
| 196 |
-
2. **使用者測試**: 收集實際使用者對新 UI 的反饋
|
| 197 |
-
3. **暗色模式**: 目前設計已是暗色,可考慮添加亮色模式選項
|
| 198 |
-
4. **國際化**: 準備多語言支援 (目前為繁體中文)
|
| 199 |
-
|
| 200 |
-
## 參考資源
|
| 201 |
-
|
| 202 |
-
- [UI/UX Pro Max Design System](/.claude/skills/ui-ux-pro-max/)
|
| 203 |
-
- [Lucide Icons](https://lucide.dev/)
|
| 204 |
-
- [Tailwind CSS Documentation](https://tailwindcss.com/)
|
| 205 |
-
- [Google Fonts - Poppins](https://fonts.google.com/specimen/Poppins)
|
| 206 |
-
- [Google Fonts - Open Sans](https://fonts.google.com/specimen/Open+Sans)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uv.lock
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|