VFX
VFX
- VFX 模型可以为视频或图像添加电影化、高冲击力的视觉特效。它通过 AI 合成和运动生成技术,模拟爆炸、解体、悬浮和元素力量等大规模视觉效果。
功能
- 创作者只需使用简单提示词或预设,即可获得好莱坞风格的视觉特效。系统会利用空间、时间和视觉一致性机制,将效果合成到提供的媒体上。
核心功能
- AI 驱动的视觉特效: 为静态图像或视频添加爆炸、闪电、龙卷风等动态电影化效果。
- 预设效果库: 支持建筑爆炸、汽车爆炸等预置效果。
- 空间感知合成: 使用 AI 推断的对象位置,将效果与主体对齐并自然融合。
- 时间控制: 自动校准特效时长和过渡时间,提升真实感。
- 图像输入: 支持静态画面和短视频片段。
限制
- 效果强度可能有所不同: 某些预设高度依赖主体姿势、位置或光照,才能获得最佳结果。
- 优先支持单主体: 目前针对包含一个或两个主要视觉主体(例如人物或汽车)的场景进行了优化。
- 更适合静态背景: 摄像机运动或背景复杂的场景可能降低真实感。
- 暂不支持精细控制: 用户还不能完全自定义特效的位置、图层关系或路径动画。
不适用的用途
-
VFX 不得用于:
- 模拟真实灾难影像,以误导他人或制造恐慌。
- 在缺乏背景说明或未经同意的情况下制作伤害、暴力或虐待的视觉内容。
- 在敏感场景中修改未成年人的图像。
- 制作虚假信息或冒充他人的宣传活动。
- 制作宣扬仇恨、极端主义或违法活动的场景。
身份验证
- 身份验证详情请参阅身份验证指南。
API 端点
提交任务并查询结果
-
cURL
# Submit Task curl --location --request POST 'https://api.muapi.ai/api/v1/generate_wan_ai_effects' \ --header "Content-Type: application/json" \ --header "x-api-key: {MUAPIAPP_API_KEY}" \ --data-raw '{ "prompt": "a Mercedes bench car", "image_url": "https://example.com/car.jpg", "name": "Car Explosion", "aspect_ratio": "16:9", "resolution": "480p", "quality": "medium", "duration": 5 }' # Poll for results curl --location --request GET "https://api.muapi.ai/api/v1/predictions/${request_id}/result" \ --header "x-api-key: {MUAPIAPP_API_KEY}" -
Python
import os import requests import json import time from dotenv import load_dotenv load_dotenv() def main(): print("Hello from MuApiApp!") API_KEY = os.getenv("MUAPIAPP_API_KEY") print(f"API_KEY: {API_KEY}") url = "https://api.muapi.ai/api/v1/generate_wan_ai_effects" headers = { "Content-Type": "application/json", "x-api-key": f"{API_KEY}", } payload = { "prompt": "a Mercedes bench car", "image_url": "https://d3adwkbyhxyrtq.cloudfront.net/ai-images/186/325013990791/fa5a980c-5c3c-42c3-87a3-578976ffd8a6.jpg", "name": "Car Explosion", "aspect_ratio": "16:9", "resolution": "480p", "quality": "medium", "duration": 5 } begin = time.time() response = requests.post(url, headers=headers, data=json.dumps(payload)) if response.status_code == 200: result = response.json() request_id = result["data"]["request_id"] print(f"Task submitted successfully. Request ID: {request_id}") else: print(f"Error: {response.status_code}, {response.text}") return url = f"https://api.muapi.ai/api/v1/predictions/{request_id}/result" headers = {"x-api-key": f"{API_KEY}"} while True: response = requests.get(url, headers=headers) if response.status_code == 200: result = response.json() status = result["data"]["status"] if status == "completed": end = time.time() print(f"Task completed in {end - begin} seconds.") url = result["video"]["url"] print(f"Task completed. URL: {url}") break elif status == "failed": print(f"Task failed: {result.get('error')}") break else: print(f"Task still processing. Status: {status}") else: print(f"Error: {response.status_code}, {response.text}") break time.sleep(0.5) if __name__ == "__main__": main() -
JavaScript
require('dotenv').config(); const axios = require('axios'); async function main() { console.log("Hello from MuApiApp!"); const API_KEY = process.env.MUAPIAPP_API_KEY; console.log(`API_KEY: ${API_KEY}`); const url = 'https://api.muapi.ai/api/v1/generate_wan_ai_effects'; const headers = { 'Content-Type': 'application/json', 'x-api-key': `${API_KEY}`, }; const payload = { prompt: 'a Mercedes bench car', image_url: 'https://d3adwkbyhxyrtq.cloudfront.net/ai-images/186/325013990791/fa5a980c-5c3c-42c3-87a3-578976ffd8a6.jpg', name: '3Car Explosion', aspect_ratio: '16:9', resolution: '480p', quality: 'medium', duration: 5, }; try { const begin = Date.now(); const response = await axios.post(url, payload, { headers }); if (response.status === 200) { const requestId = response.data.data.request_id; console.log(`Task submitted successfully. Request ID: ${requestId}`); const resultUrl = `https://api.muapi.ai/api/v1/predictions/${request_id}/result`; const pollHeaders = { x-api-key: `${API_KEY}` }; while (true) { const pollResponse = await axios.get(resultUrl, { headers: pollHeaders }); if (pollResponse.status === 200) { const status = pollResponse.data.data.status; if (status === 'completed') { const end = Date.now(); console.log(`Task completed in ${(end - begin) / 1000} seconds.`); const videoUrl = pollResponse.data.video.url; console.log(`Task completed. URL: ${videoUrl}`); break; } else if (status === 'failed') { console.log(`Task failed: ${pollResponse.data.error}`); break; } else { console.log(`Task still processing. Status: ${status}`); } } else { console.log(`Error: ${pollResponse.status}, ${pollResponse.statusText}`); break; } await new Promise(resolve => setTimeout(resolve, 500)); } } else { console.log(`Error: ${response.status}, ${response.statusText}`); } } catch (error) { console.error(`Request failed: ${error.message}`); } } main();
参数
任务提交参数
请求参数
| 参数 | 类型 | 必填 | 默认值 | 范围 | 描述 |
|---|---|---|---|---|---|
| prompt | string | 是 | "" | - | 生成输出的提示词。 |
| image_url | string | 是 | "" | - | 用于生成输出的图像。 |
| name | string | 是 | "" | - | 任务或输出文件的自定义名称。 |
| aspect_ratio | string | 否 | 16:9 | 1:1、9:16、16:9 | 输出视频的画面比例。 |
| resolution | string | 否 | 480p | 480p、720p | 输出视频的分辨率。 |
| quality | string | 否 | medium | medium、high | 控制整体视频质量(会影响渲染时间)。 |
| duration | number | 否 | 5 | 5 ~ 10 | 生成视频的时长(秒)。 |
响应参数
| 参数 | 类型 | 描述 |
|---|---|---|
| code | integer | HTTP 状态码(例如成功时为 200)。 |
| message | string | 状态消息(例如“success”)。 |
| id | string | 生成任务的唯一标识符。 |
| outputs | array of strings | 指向生成视频输出的 URL。 |
| urls.get | string | 根据任务 ID 获取结果的 API URL。 |
| has_nsfw_contents | array of booleans | 表示输出是否包含 NSFW 内容。 |
| status | string | 任务状态:completed、failed 或 processing。 |
| created_at | string(时间戳) | 任务创建时间的 ISO 时间戳。 |
| error | string | 任务失败时的错误消息;成功时为空。 |
| executionTime | number(毫秒) | 完成任务所花费的总时间(毫秒)。 |
| timings.inference | number(毫秒) | 模型推理所花费的时间(毫秒)。 |
结果查询参数
结果请求参数
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| id | string | 是 | - | 任务 ID |
结果响应参数
| 参数 | 类型 | 描述 |
|---|---|---|
| code | integer | HTTP 状态码(例如成功时为 200)。 |
| message | string | 状态消息(例如“success”)。 |
| id | string | 生成任务的唯一标识符。 |
| outputs | array of strings | 指向生成视频输出的 URL。 |
| urls.get | string | 根据任务 ID 获取结果的 API URL。 |
| has_nsfw_contents | array of booleans | 表示输出是否包含 NSFW 内容。 |
| status | string | 任务状态:completed、failed 或 processing。 |
| created_at | string(时间戳) | 任务创建时间的 ISO 时间戳。 |
| error | string | 任务失败时的错误消息;成功时为空。 |
| executionTime | number(毫秒) | 完成任务所花费的总时间(毫秒)。 |
| timings.inference | number(毫秒) | 模型推理所花费的时间(毫秒)。 |