图像、视频与音频生成
使用 Replicate 提供商构建基于任务的媒体生成流程。
模板包含由 Replicate 驱动的图像、视频与音频 Example(示例)。三类功能采用 相同流程:创建远程任务、保存任务 ID、轮询查询端点、归一化状态并渲染结果 URL。
六个媒体端点都是公开示例,没有会话校验、配额、限流、持久任务记录或成本控制。 不要原样开放到生产环境。
提供的能力
| 媒体 | 页面 | 创建端点 | 查询端点 |
|---|---|---|---|
| 图像 | /ai/image | POST /api/ai/image | POST /api/ai/image/query |
| 视频 | /ai/video | POST /api/ai/video | POST /api/ai/video/query |
| 音频 | /ai/audio | POST /api/ai/audio | POST /api/ai/audio/query |
在 .env 中设置仅服务端可见的令牌并重启应用:
REPLICATE_API_TOKEN=your-replicate-api-token若令牌缺失,路由请求默认 replicate 提供商时,对应工厂会抛出“未配置提供商”错误。
架构
src/lib/ai/ 下三个功能目录都包含:
types.ts:提供商类型、创建/查询请求、统一响应和提供商接口。replicate-provider.ts:创建与查询 Replicate prediction、输入映射、状态映射和 输出 URL 提取。index.ts:惰性单例工厂;令牌存在时注册 Replicate,并按类型返回提供商。
src/lib/ai/index.ts 统一导出三类工厂与接口。Route Handler 依赖这些接口,
而不是在 UI 中直接创建 Replicate 客户端。
任务生命周期
- 生成器把提示词、模型、输入和选项提交到创建路由。
- 路由做基础结构校验,并向工厂请求
replicate(除非传入了provider)。 - Replicate 返回 prediction ID;路由响应
taskId、状态和提供商任务信息。 - 客户端轮询对应
/query路由:图像/音频每 5 秒,视频每 15 秒。 - 提供商把 Replicate 的
starting、processing、succeeded、failed、canceled映射为统一状态pending、processing、succeeded、failed、canceled。 - 查询结果把 HTTP(S) 输出提取到
imageUrls、videoUrls或audioUrls。
任务状态只存在于浏览器和 Replicate。刷新页面会丢失本地任务 ID 与历史记录,模板 也不会自动把结果复制到持久存储。
内置模型与输入
图像
ImageGenerator.tsx 支持文生图和参考图生成,尺寸包括 1024x1024、
1792x1024、1024x1792,模型包括:
black-forest-labs/flux-2-pro(默认)bytedance/seedream-3
没有提交模型时,提供商回退到 black-forest-labs/flux-2-pro;尺寸分别映射为
1:1、16:9、9:16,可选参考图通过 input_images 发送。
视频
VideoGenerator.tsx 提供文生视频、图生视频、视频转视频三个标签页,模型为
kwaivgi/kling-v2.5-turbo-pro(默认)、google/veo-3.1 和
openai/sora-2。UI 将提示词限制为 2,000 个字符。
不同模型使用不同参考输入字段:Veo 使用 reference_images,Sora 使用
input_reference,其他图像模型使用 image_input,视频输入使用 video_input。
音频
AudioGenerator.tsx 使用 qwen/qwen3-tts,提供文本转音频与音频转音频/声音
克隆 UI。它发送语言与模式;提供商再映射为 Qwen 的 text、规范化语言、
custom_voice 或 voice_clone,以及可选 reference_audio 字段。
更换 Replicate 模型
更新 UI 选项
修改对应生成器组件中的模型列表。它决定用户可选择什么,但不是服务端白名单。
更新提供商输入映射
查看目标模型的 Replicate 输入 schema,并修改对应 createTask()。即使都来自
Replicate,不同模型也可能要求完全不同的字段、枚举值或文件格式。
验证输出提取
检查真实 prediction 输出。如果对象结构不同,扩展 extractImageUrls、
extractVideoUrls 或 extractAudioUrls。
在服务端强制校验
在创建路由校验模型、场景、提示词、文件和选项。当前路由只做基础检查,仍会接受 客户端提交的模型/提供商值。
添加其他提供商
- 扩展
ImageProviderType、VideoProviderType或AudioProviderType。 - 在新模块中实现对应提供商接口。
- 当服务端凭据存在时,在对应工厂中注册实现。
- 通过可信的服务端逻辑选择提供商;若允许客户端请求,必须用白名单校验。
- 保持统一状态和 URL 响应字段不变,让现有 UI 无需增加提供商分支。
生产加固
- 为所有创建/查询路由添加认证,并校验任务归属。
- 用 schema 校验提示词、模型、提供商、选项、URL、文件类型与大小。
- 加入按用户限流、并发限制、配额和预算告警。
- 持久化任务 ID、所有者、输入、状态、失败信息与用量。
- 使用有上限的退避轮询、超时、重试策略和取消机制。
- 在提供商 URL 过期前,把完成结果复制到持久对象存储。
- 审核提示词/上传内容,并防止不可信输入 URL 引发 SSRF。
- 不向客户端泄露提供商内部错误;增加结构化日志和指标。
