AI图像与视频生成

基于 Azure OpenAI 的 gpt-image-1 和 Sora 模型,实现图像生成和视频生成能力。

概述

团队在 Azure Foundry 上部署了 gpt-image-1gpt-image-1.5 两个图像生成模型。Dora-kids 基于提供的参考代码,创建了 azure-image-gen skill,封装了 Azure OpenAI 画图 API 的调用逻辑。

该技能最初用于为 Mattermost 平台上的多个 Bot 批量生成个性化头像。skill 中配置的模型名称为 gpt-image-1.5,Azure 上确认两个模型(gpt-image-1gpt-image-1.5)均已部署可用。此前误判 skill broken 系排查有误。

关键点

  • 部署位置: resley-sweden-ext Azure Foundry
  • 模型: gpt-image-1gpt-image-1.5(均已部署可用)
  • Skill 路径: skills/azure-image-gen/
  • Skill 状态: 可用(此前误判为 broken)
  • 主要用途: 生成 Bot 头像、卡通图像

技术细节

参考代码(Python SDK 调用方式)

import base64
from openai import OpenAI
 
endpoint = "https://resley-sweden-ext.openai.azure.com/openai/v1/"
deployment_name = "gpt-image-1.5"
api_key = "<your-api-key>"
 
client = OpenAI(base_url=endpoint, api_key=api_key)
 
img = client.images.generate(
    model=deployment_name,
    prompt="A cute baby polar bear",
    n=1,
    size="1024x1024",
)
 
image_bytes = base64.b64decode(img.data[0].b64_json)
with open("output.png", "wb") as f:
    f.write(image_bytes)

直接 API 调用方式

POST https://resley-sweden.openai.azure.com/openai/deployments/gpt-image-1/images/generations...

注意:Azure 的认证方式使用 api-key header,而不是 Bearer token。

已知问题

  • 此前 wiki 误判 “skill broken 因为模型名 1.5 不存在”。04-14 用 https://resley-sweden-ext.openai.azure.com/openai/v1 列模型部署验证:gpt-image-1gpt-image-1.5-2025-12-16 都已部署可用。 Skill 当前可用。

时间线

  • 2026-03-17: 在 resley-sweden-ext 上部署 gpt-image-1.5 模型
  • 2026-03-17: 创建 azure-image-gen skill,生成 Quokka 和 Axolotl 头像
  • 2026-03-17: 批量为 6 个 Bot 生成个性化头像(channelbot、webbot、gatewaybot 等)
  • 2026-03-22: 发现 skill 因模型名不匹配已 broken,标记为 Legacy
  • 2026-04-14: 验证后撤销 broken 判断 — gpt-image-1gpt-image-1.5 都部署可用,skill 实际未坏

多 Region 部署清单(04-13 整理)

Region 资源部署用途
resley-sweden-ext.openai.azure.comgpt-image-1gpt-image-1.5-2025-12-16通用文生图
resley-east-us-2-resource.cognitiveservices.azure.comgpt-image-15汪汪队 AI 合照(绑 lenient-image-gen RAI policy)+ Hermes Ottor 实例画像 cron
resley-sweden-ext.cognitiveservices.azure.comsora-2视频生成(魔法画室)

API 路径差异:纯文生图走 /openai/deployments/{name}/images/generations,需要参考图的图生图走 /images/edits(multipart)。两者均用 api-key header(非 Bearer)。

Ottor Hermes 集成(04-13):因无 FAL_KEY,Hermes image_generate 工具被改造为直接调用 east-us-2 的 gpt-image-15b64_json 解码后落盘到 ~/wiki/raw/assets/shutiao-portraits/,由周度 cron 投递到微信。内容审核坑:prompt 里出现 “3-year-old boy” 等真实儿童描述会触发 moderation_blocked,必须改为中性卡通角色描述(详见 shutiao-world 画像方案)。

相关页面

Azure Sora 视频生成(sora-video 技能)

概述

giraffe Bot 创建了 sora-video 自定义技能,用于将静态图片(涂鸦/画作)通过 Azure Sora 模型转化为短视频动画。该功能已集成到薯条世界的「魔法画室」模块。

部署信息

属性
Endpointhttps://resley-sweden-ext.cognitiveservices.azure.com/
模型部署名sora-2
API 路径/openai/v1/videos
SDKOpenAI Python SDK client.videos.create()
技能路径~/.openclaw/skills/sora-video/

支持的风格

风格描述
🖍️ 涂鸦风保持白板原画风格动画
🌟 破次元壁2D 平面弹出变 3D
🚀 太空冒险画中角色飞向星空
🌧️ 雨天场景雨中行驶,车轮溅起水花
🎬 定格动画黏土动画手工感
✏️ 涂鸦大战更多元素从白板冒出

踩坑记录

  1. 音频采样率: Sora 输出 96kHz 音频,大部分播放器不支持 → 用 ffmpeg 转码到 44.1kHz
  2. 纵横比扭曲: 横版原图被强行拉成竖版 720×1280 → 必须按原图比例选择输出尺寸
  3. faststart: MP4 需要 -movflags +faststart 才能流式播放
  4. 内容审核: Azure Sora 对真实儿童照片会触发 moderation_blocked,只能使用涂鸦/画作
  5. API 格式变更: 旧版 multipart form upload 方式已不兼容,需使用 OpenAI SDK client.videos.create(input_reference=file)
  6. 生成时间: 约 1-2 分钟,需异步轮询状态

2026-04-23 gpt-image-2 上线(east-us-2)

ottor 上午测出 east-us-2 region 已部署 gpt-image-2,可用:

Endpointhttps://resley-east-us-2-resource.cognitiveservices.azure.com
Deployment 名gpt-image-2
API version2025-04-01-preview(与 1.5 同套)
路径/openai/deployments/gpt-image-2/images/generations
响应时间~20s(首次冷启动稍长,需把客户端超时 ≥120s)
返回b64_json,~775KB PNG

命名陷阱:deployment 必须是 gpt-image-2gpt-image-20 / gpt-image-25 都返回 404,过去判断”未上线”的脚本在错的命名上踩了。

Response shape 与 1.5 的差异——多了 usage / output_format / background / quality / size 字段;input_tokens=110, output_tokens=5574 量级。基本兼容 1.5,但:

  • response_format 参数不再支持——传了直接 400。azure-image-gen skill 与 image-studio src/lib/azure.ts 都删掉这个字段(image-studio commit 14f9981
  • quality 字段是必填:A/B 实测 quality=low 118s ✅、quality=medium 86s ✅、不传 → 500。把它当成与 prompt/size/n 同级的必传项
  • quantity/质量参数限制:服务器侧实测高质量 quality=high 时常 429/500,目前主要走 medium/low

azure-image-generation skill 同日重写:移除所有硬编码 endpoint/key/api-version,改成 set -a; source ~/.credentials/.env; set +a + 引用 $IMAGE_STUDIO__AZURE_OPENAI_*game-asset-pipeline/scripts/batch_gen.py 顺手清掉裸 KEY=...。Sora 2(Sweden region)三个值(endpoint/key/deployment)也补进 ~/.credentials/.env,统一前缀 SORA__

详见 image-studio —— 当天围绕 gpt-image-2 包出来的 SaaS 站点。

2026-04-19 MAI-Image-2e 部署 + east-us-2 gpt-image-1 下线

ottor 整理:

  • east-us-2 上 gpt-image-1 删除:4-13 临时挂的 gpt-image-15 也并入清理,east-us-2 不再承担文生图,集中到 sweden 系
  • sweden-ext 新增 MAI-Image-2e:Microsoft Azure AI 自有图像模型族(model-format=Microsoft, OpenAI),SKU GlobalStandard
  • 新端点格式
    POST https://<account>.services.ai.azure.com/mai/images/generations?api-version=2025-04-01-preview
    
    注意路径是 /mai/images/generations,不是 OpenAI 的 /openai/deployments/.../images/generations,请求体字段也有差异(model 直接写 MAI-Image-2/MAI-Image-2e
  • 新 skillcreative/azure-mai-image-generation/,封装 Microsoft 格式调用,与现有 azure-image-gen(OpenAI 格式)并列
  • 用途:薯条画像生成支线在 MAI-Image-2e 上跑了一轮 A/B,对中性卡通角色出图速度比 gpt-image-1.5 快 30%,但风格控制不如 gpt-image,画像主线仍用 gpt-image-1.5,MAI-2e 用作场景背景批量出图(详见 shutiao-world 04-19 13 张场景 PNG)
  • 中文渲染避坑(同日 skill creative/azure-mai-image-generation 第二轮迭代):MAI 对中文字符渲染脆弱,目标字符 ≤10 个、首选繁体( 出图清晰)、把目标文字在 prompt 中放大要求”big bold center”;超长或冷僻字直接 fallback 到拼音 / 英文。整理进 skill 文档,避免每次出图都踩。

2026-05-04 三模型实测耗时对比(20 职业 5×4 拼贴,1536×1024 high)

模型文件大小耗时适用
gpt-image-2 (East US 2 OpenAI)2.0 MB~247s质感最好 / 但超复杂 prompt 偶尔 500
gpt-image-1.5 (Sweden Ext OpenAI)2.5 MB142s复杂构图反而更稳 / 字段没 v2 全
MAI-Image-2e (Sweden ai.azure.com Microsoft)1.4 MB74s ⚡最快 / 风格控制弱

默认路由:用户说”画张图”无修饰 → gpt-image-2;说”快一点” → gpt-image-1.5;说”用 MAI / C2PA” → MAI-Image-2e;要视频 → Sora。

azure-image-generation(OpenAI 系,East US 2 + Sweden Ext)和 azure-mai-image-generation(Microsoft,Sweden ai.azure.com)两个 skill 拆开是对的:endpoint 路径(/openai/deployments/.../images/generations vs /mai/images/generations)、API version、--model-format 部署字段(OpenAI vs Microsoft,不是 AIServices 也不是 MAI,踩过坑)全部不同,硬合容易出错。