图像、视频与音频生成
使用 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.ts、index.ts(factory)与
replicate-provider.ts。replicate-utils.ts 统一 provider 状态,并从不同输出
结构递归提取 HTTP URL。Factory 延迟初始化,使 REPLICATE_API_TOKEN 在请求期间
读取。
| 媒体 | 页面组件 | 创建/查询接口 | 内置模型 |
|---|---|---|---|
| 图像 | ImageGenerator.tsx | /api/ai/image、/api/ai/image/query | FLUX 2 Pro、Seedream 3 |
| 视频 | VideoGenerator.tsx | /api/ai/video、/api/ai/video/query | Kling 2.5 Turbo Pro、Veo 3.1、Sora 2 |
| 音频 | AudioGenerator.tsx | /api/ai/audio、/api/ai/audio/query | Qwen3-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 把产品层请求转换为模型特定输入:
- 图像把
1024x1024、1792x1024、1024x1792映射为宽高比;可选源图像 数据写入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 只在 succeeded 或 failed 时明确
停止;取消的 task 可能继续轮询到客户端超时。产品化时应把 canceled 作为终态。
Task ID 与结果只在浏览器 state 中,刷新会丢失任务;返回 URL 仍由 provider 托管,并未复制到 R2。
添加 provider
- 扩展对应媒体的
ProviderTypeunion。 - 实现
ImageProvider、VideoProvider或AudioProvider接口。 - 使用请求期 secret 在 factory 注册。
- 明确扩展接口 Zod schema 与客户端 selector。
- 把状态、错误、task ID 与输出 URL 统一到现有响应 contract。
- 为 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 所有权受到保护。
