# MoneyPrinterTurbo API 使用指南 ## API 密钥配置 ### 在 Huggingface Spaces 中配置环境变量 在 Huggingface Spaces 的 Settings → Repository secrets 中添加以下环境变量: #### 必需的环境变量 ```bash # MoneyPrinterTurbo API 访问密钥(用于外部调用API) MONEYPRINTER_API_KEY=your_api_key_here # LLM 提供商 API 密钥(至少选择一个) DEEPSEEK_API_KEY=your_deepseek_key_here # 推荐:国内可直接访问 MOONSHOT_API_KEY=your_moonshot_key_here # 推荐:国内可直接访问 OPENAI_API_KEY=your_openai_key_here # 视频素材源 API 密钥(至少选择一个) PEXELS_API_KEY=your_pexels_key_here # 推荐:免费,质量高 PIXABAY_API_KEY=your_pixabay_key_here ``` #### 可选的环境变量 ```bash # Azure 语音服务(用于高质量语音合成) AZURE_SPEECH_KEY=your_azure_speech_key AZURE_SPEECH_REGION=your_azure_region # 例如:eastus ``` ## API 使用示例 ### 1. 生成完整视频 ```python import requests import json # API 配置 base_url = "https://your-space-name-your-username.hf.space" api_key = "your_moneyprinter_api_key" headers = { "X-API-Key": api_key, "Content-Type": "application/json" } # 视频生成请求 video_data = { "video_subject": "春天的花海", "video_script": "", # 留空则自动生成 "video_aspect": "9:16", # 竖屏 "video_clip_duration": 3, "video_count": 1, "video_source": "pexels", "voice_name": "zh-CN-XiaoxiaoNeural", "voice_rate": 1.0, "voice_volume": 1.0, "subtitle_enabled": True, "font_size": 60, "text_fore_color": "#FFFFFF" } # 发送请求 response = requests.post( f"{base_url}/videos", headers=headers, json=video_data ) if response.status_code == 200: result = response.json() task_id = result["data"]["task_id"] print(f"任务创建成功,ID: {task_id}") else: print(f"请求失败: {response.text}") ``` ### 2. 查询任务状态 ```python # 查询任务状态 def check_task_status(task_id): response = requests.get( f"{base_url}/tasks/{task_id}", headers=headers ) if response.status_code == 200: task_info = response.json()["data"] print(f"任务状态: {task_info.get('state')}") print(f"进度: {task_info.get('progress', 0)}%") if "videos" in task_info: print("生成的视频:") for video_url in task_info["videos"]: print(f" - {video_url}") return task_info else: print(f"查询失败: {response.text}") return None # 轮询任务状态直到完成 import time task_info = None while True: task_info = check_task_status(task_id) if task_info and task_info.get("state") == 1: # 完成状态 break elif task_info and task_info.get("state") == -1: # 失败状态 print("任务失败") break time.sleep(10) # 等待10秒后再次查询 ``` ### 3. 仅生成音频 ```python audio_data = { "video_script": "这是一段测试音频文本", "voice_name": "zh-CN-XiaoxiaoNeural", "voice_rate": 1.0, "voice_volume": 1.0 } response = requests.post( f"{base_url}/audio", headers=headers, json=audio_data ) ``` ### 4. 仅生成字幕 ```python subtitle_data = { "video_script": "这是一段测试字幕文本", "voice_name": "zh-CN-XiaoxiaoNeural", "subtitle_enabled": True, "font_size": 60 } response = requests.post( f"{base_url}/subtitle", headers=headers, json=subtitle_data ) ``` ## JavaScript/Node.js 示例 ```javascript const axios = require('axios'); const baseURL = 'https://your-space-name-your-username.hf.space'; const apiKey = 'your_moneyprinter_api_key'; const headers = { 'X-API-Key': apiKey, 'Content-Type': 'application/json' }; async function generateVideo() { try { const response = await axios.post(`${baseURL}/videos`, { video_subject: "人工智能的发展", video_aspect: "16:9", video_clip_duration: 5, video_source: "pexels", voice_name: "zh-CN-XiaoxiaoNeural" }, { headers }); const taskId = response.data.data.task_id; console.log(`任务创建成功,ID: ${taskId}`); // 轮询任务状态 const checkStatus = setInterval(async () => { const statusResponse = await axios.get( `${baseURL}/tasks/${taskId}`, { headers } ); const taskInfo = statusResponse.data.data; console.log(`进度: ${taskInfo.progress || 0}%`); if (taskInfo.state === 1) { console.log('视频生成完成:', taskInfo.videos); clearInterval(checkStatus); } else if (taskInfo.state === -1) { console.log('任务失败'); clearInterval(checkStatus); } }, 10000); } catch (error) { console.error('请求失败:', error.response?.data || error.message); } } generateVideo(); ``` ## cURL 示例 ```bash # 生成视频 curl -X POST "https://your-space-name-your-username.hf.space/videos" \ -H "X-API-Key: your_moneyprinter_api_key" \ -H "Content-Type: application/json" \ -d '{ "video_subject": "科技创新", "video_aspect": "9:16", "video_clip_duration": 3, "video_source": "pexels", "voice_name": "zh-CN-XiaoxiaoNeural" }' # 查询任务状态 curl -X GET "https://your-space-name-your-username.hf.space/tasks/TASK_ID" \ -H "X-API-Key: your_moneyprinter_api_key" ``` ## 错误处理 ### 常见错误码 - **401**: API 密钥无效或缺失 - **400**: 请求参数错误 - **404**: 任务不存在 - **500**: 服务器内部错误 ### 错误处理示例 ```python def handle_api_response(response): if response.status_code == 401: print("错误: API 密钥无效,请检查 X-API-Key 头部") elif response.status_code == 400: print(f"错误: 请求参数错误 - {response.json().get('message', '')}") elif response.status_code == 404: print("错误: 请求的资源不存在") elif response.status_code == 500: print("错误: 服务器内部错误,请稍后重试") else: return response.json() return None ``` ## 配置说明 ### API 密钥获取方式 1. **DeepSeek**: https://platform.deepseek.com/api_keys 2. **Moonshot**: https://platform.moonshot.cn/console/api-keys 3. **Pexels**: https://www.pexels.com/api/ 4. **Pixabay**: https://pixabay.com/api/docs/ ### 推荐配置 - **LLM**: DeepSeek(国内访问快,价格便宜) - **视频源**: Pexels(免费,质量高) - **语音**: Azure TTS V1(免费额度充足)