图像、视频与音频生成

使用 Replicate 提供商构建基于任务的媒体生成流程。

模板包含由 Replicate 驱动的图像、视频与音频 Example(示例)。三类功能采用 相同流程:创建远程任务、保存任务 ID、轮询查询端点、归一化状态并渲染结果 URL。

六个媒体端点都是公开示例,没有会话校验、配额、限流、持久任务记录或成本控制。 不要原样开放到生产环境。

提供的能力

媒体页面创建端点查询端点
图像/ai/imagePOST /api/ai/imagePOST /api/ai/image/query
视频/ai/videoPOST /api/ai/videoPOST /api/ai/video/query
音频/ai/audioPOST /api/ai/audioPOST /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 客户端。

任务生命周期

  1. 生成器把提示词、模型、输入和选项提交到创建路由。
  2. 路由做基础结构校验,并向工厂请求 replicate(除非传入了 provider)。
  3. Replicate 返回 prediction ID;路由响应 taskId、状态和提供商任务信息。
  4. 客户端轮询对应 /query 路由:图像/音频每 5 秒,视频每 15 秒。
  5. 提供商把 Replicate 的 startingprocessingsucceededfailedcanceled 映射为统一状态 pendingprocessingsucceededfailedcanceled
  6. 查询结果把 HTTP(S) 输出提取到 imageUrlsvideoUrlsaudioUrls

任务状态只存在于浏览器和 Replicate。刷新页面会丢失本地任务 ID 与历史记录,模板 也不会自动把结果复制到持久存储。

内置模型与输入

图像

ImageGenerator.tsx 支持文生图和参考图生成,尺寸包括 1024x10241792x10241024x1792,模型包括:

  • black-forest-labs/flux-2-pro(默认)
  • bytedance/seedream-3

没有提交模型时,提供商回退到 black-forest-labs/flux-2-pro;尺寸分别映射为 1:116:99:16,可选参考图通过 input_images 发送。

视频

VideoGenerator.tsx 提供文生视频、图生视频、视频转视频三个标签页,模型为 kwaivgi/kling-v2.5-turbo-pro(默认)、google/veo-3.1openai/sora-2。UI 将提示词限制为 2,000 个字符。

不同模型使用不同参考输入字段:Veo 使用 reference_images,Sora 使用 input_reference,其他图像模型使用 image_input,视频输入使用 video_input

音频

AudioGenerator.tsx 使用 qwen/qwen3-tts,提供文本转音频与音频转音频/声音 克隆 UI。它发送语言与模式;提供商再映射为 Qwen 的 text、规范化语言、 custom_voicevoice_clone,以及可选 reference_audio 字段。

更换 Replicate 模型

更新 UI 选项

修改对应生成器组件中的模型列表。它决定用户可选择什么,但不是服务端白名单。

更新提供商输入映射

查看目标模型的 Replicate 输入 schema,并修改对应 createTask()。即使都来自 Replicate,不同模型也可能要求完全不同的字段、枚举值或文件格式。

验证输出提取

检查真实 prediction 输出。如果对象结构不同,扩展 extractImageUrlsextractVideoUrlsextractAudioUrls

在服务端强制校验

在创建路由校验模型、场景、提示词、文件和选项。当前路由只做基础检查,仍会接受 客户端提交的模型/提供商值。

添加其他提供商

  1. 扩展 ImageProviderTypeVideoProviderTypeAudioProviderType
  2. 在新模块中实现对应提供商接口。
  3. 当服务端凭据存在时,在对应工厂中注册实现。
  4. 通过可信的服务端逻辑选择提供商;若允许客户端请求,必须用白名单校验。
  5. 保持统一状态和 URL 响应字段不变,让现有 UI 无需增加提供商分支。

生产加固

  • 为所有创建/查询路由添加认证,并校验任务归属。
  • 用 schema 校验提示词、模型、提供商、选项、URL、文件类型与大小。
  • 加入按用户限流、并发限制、配额和预算告警。
  • 持久化任务 ID、所有者、输入、状态、失败信息与用量。
  • 使用有上限的退避轮询、超时、重试策略和取消机制。
  • 在提供商 URL 过期前,把完成结果复制到持久对象存储。
  • 审核提示词/上传内容,并防止不可信输入 URL 引发 SSRF。
  • 不向客户端泄露提供商内部错误;增加结构化日志和指标。

相关页面

On this page