图像、视频与音频生成

使用 Replicate provider 构建基于 task 的媒体生成流程。

图像、视频与音频生成是基于 Replicate 异步 prediction 的可运行示例。每个 流程创建 provider task、立即返回 task ID,再由浏览器轮询查询接口,直到取得 输出 URL。

共用架构

生成 UI → POST /api/ai/<media> → provider factory → Replicate prediction
        ← taskId + 规范化状态

生成 UI → POST /api/ai/<media>/query { taskId }(轮询)
        ← pending | processing | succeeded | failed | canceled + 输出 URL

每个 src/lib/ai/{image,video,audio} 目录包含 types.tsindex.ts(factory)与 replicate-provider.tsreplicate-utils.ts 统一 provider 状态,并从不同输出 结构递归提取 HTTP URL。Factory 延迟初始化,使 REPLICATE_API_TOKEN 在请求期间 读取。

媒体页面组件创建/查询接口内置模型
图像ImageGenerator.tsx/api/ai/image/api/ai/image/queryFLUX 2 Pro、Seedream 3
视频VideoGenerator.tsx/api/ai/video/api/ai/video/queryKling 2.5 Turbo Pro、Veo 3.1、Sora 2
音频AudioGenerator.tsx/api/ai/audio/api/ai/audio/queryQwen3-TTS

{-$locale}/_marketing/ai 下的多语言营销路由挂载这些组件;UI 标签目前为英文。

配置

# .env(仅本地)
REPLICATE_API_TOKEN=r8_your-token

pnpm wrangler secret put REPLICATE_API_TOKEN

没有 token 时,factory 会抛出清晰的“provider 未配置”错误。绝不要将 token 暴露为 VITE_*

输入映射

Provider adapter 把产品层请求转换为模型特定输入:

  • 图像把 1024x10241792x10241024x1792 映射为宽高比;可选源图像 数据写入 input_images
  • 视频支持文生视频、图生视频与视频转视频。Veo 使用 reference_images,Sora 使用 input_reference,其他模型使用 image_input/video_input
  • 音频把短 locale 映射为 Qwen 语言名,并转换 voice/clone 模式;clone 模式传 reference_audio

更换模型不只是修改 selector:应同时更新 UI 选项、provider 输入映射、校验与 能力、必要时的输出解析,以及成本/超时策略。需要可复现结果时应固定版本,而非 静默跟随可变 model alias。

轮询行为

图像和音频每五秒查询一次,五分钟超时;视频每十五秒查询一次,十分钟超时。 长时间生成发生在 Replicate,每次 Worker 请求只负责创建或查询 task,比保持一个 请求直到生成完成更适合 Workers。

规范化状态包含 canceled,但当前生成 UI 只在 succeededfailed 时明确 停止;取消的 task 可能继续轮询到客户端超时。产品化时应把 canceled 作为终态。

Task ID 与结果只在浏览器 state 中,刷新会丢失任务;返回 URL 仍由 provider 托管,并未复制到 R2。

添加 provider

  1. 扩展对应媒体的 ProviderType union。
  2. 实现 ImageProviderVideoProviderAudioProvider 接口。
  3. 使用请求期 secret 在 factory 注册。
  4. 明确扩展接口 Zod schema 与客户端 selector。
  5. 把状态、错误、task ID 与输出 URL 统一到现有响应 contract。
  6. 为 provider 错误和特殊输出结构增加创建/查询测试。

生产加固

六个接口目前都是公开示例。应增加认证、task 查询所有权、限流、用户配额、模型 白名单、输入 URL 策略、prompt/body 限制、成本上限与安全错误映射。图像 data URL 和任意参考 URL 若不约束,尤其容易造成超大请求或类似 SSRF 的 provider 拉取行为。

在 D1 持久化 task 所有权/状态,让用户可恢复任务且只能查询自己的 task。若产品 需要持久媒体,把成功输出复制到 R2;provider URL 可能过期。还要补充清理/保留、 内容审核、声音克隆同意、版权策略与可观测性。

验证

  • 有效 token 下每个创建接口返回 task ID 与规范化状态。
  • 查询接口从 pending/processing 进入终态。
  • 图像宽高比与可选源图映射符合所选模型。
  • 每种视频 scene 使用正确的 provider 输入字段。
  • 音频语言/clone 输入符合 Qwen 预期。
  • 失败和取消 task 会停止轮询并显示有效信息。
  • 加固后输出会持久化到 R2,且 task 所有权受到保护。

相关页面

On this page