生成配方
Reelway 的生成能力通过两条路径暴露。生产路径是 Sogni 兼容的 WebSocket 通道:客户端(或 SDK)发送 jobRequest 帧,服务端把任务派发到 GPU 节点并实时推送进度与结果。REST 路径是创意智能体工作流(POST /v1/creative-agent/workflows),以多步 DAG 描述生成任务,适合无长连接的服务端集成。
本页的配方全部基于目录中的真实模型 ID,目录以 GET /v1/model-catalog 为准。
通过 SDK 提交(推荐)
@reelway/client 封装了握手、帧编解码、重连与事件分发。所有配方共享同一初始化:
import { SogniClient } from '@reelway/client';
const client = await SogniClient.createInstance({
appId: 'recipes-demo', // 同账号同 appId 的新连接会接管旧连接
network: 'fast', // fast | relaxed
apiKey: process.env.REELWAY_API_KEY,
});
文生图(t2i)
const project = client.projects.create({
modelId: 'z_image_turbo_bf16', // 或 'qwen_image_2512_fp8'
positivePrompt: '黄昏下的江南水乡,倒影,胶片质感',
negativePrompt: '模糊, 低质量',
numberOfImages: 2,
steps: 8,
guidance: 3.5,
seed: 42,
});
project.on('progress', ({ progress }) => console.log(`${(progress * 100).toFixed(0)}%`));
const urls = await project.waitForCompletion(); // 48 小时有效的签名 URL
文生视频(t2v)
const project = client.projects.create({
modelId: 'minimax-h3-fl2va-fp8_t2v_turbo',
positivePrompt: '一只橘猫在雨后的屋顶上伸懒腰,镜头缓慢推进,环境音',
numberOfImages: 1,
});
const [videoUrl] = await project.waitForCompletion();
图生视频(i2v)
参考图作为首帧(SDK 直传 Blob/Buffer,内部自动完成预签名上传):
const project = client.projects.create({
modelId: 'minimax-h3-fl2va-fp8_i2v',
positivePrompt: '人物转身微笑,自然光',
referenceImage: fs.readFileSync('./first-frame.png'), // 首帧
});
首尾帧(flf2v)
const project = client.projects.create({
modelId: 'minimax-h3-fl2va-fp8_flf2v',
positivePrompt: '从白天过渡到夜晚的城市天际线',
referenceImage: fs.readFileSync('./first-frame.png'),
referenceImageEnd: fs.readFileSync('./last-frame.png'),
});
参考视频(r2v)
以参考图像为锚保持主体一致,contextImages 提供额外参考:
const project = client.projects.create({
modelId: 'minimax-h3-ref2va-fp8_r2v',
positivePrompt: '同一位角色在咖啡馆里阅读',
referenceImage: fs.readFileSync('./character.png'),
contextImages: [fs.readFileSync('./outfit.png')],
});
档位选择
每个 H3 任务都有 base / _balanced / _turbo 三档:_turbo 步数最少、最快;_balanced 折中;base 质量优先。r2v 另有 _2stage 两段式变体。详见MiniMax H3。
直接使用 WebSocket 帧
不使用 SDK 时,按节点协议中的 artist 通道规范操作。关键帧:
WSwss://rcn.reelway.ai/socket?appId=<id>&forceWorkerId=fast鉴权:api-key 握手头
artist 通道;握手后首帧为 authenticated
上行 jobRequest(线协议 {type, data: base64(JSON)});图像输入先经 GET /v1/image/uploadUrl?type=<槽位>&jobId=<jobID> 上传,槽位枚举含 startingImage、referenceImage、referenceImageEnd、contextImage1..16、keyframeImage1..8:
{
"jobID": "0b0f6c0e-7d4b-4d3c-9c6f-0c7a7e3f2a11",
"numberOfImages": 1,
"previews": 0,
"outputFormat": "mp4",
"tokenType": "auto",
"network": "fast",
"keyFrames": [
{
"modelID": "minimax-h3-fl2va-fp8_t2v_turbo",
"positivePrompt": "一只橘猫在雨后的屋顶上伸懒腰",
"negativePrompt": "",
"stylePrompt": "",
"steps": 4,
"guidanceScale": 3.5,
"seed": 20251102
}
]
}
keyFrames[0].modelID 必填。服务端依次下发 projectQueue → jobState(queued|assigned|initiatingModel|jobStarted) → jobProgress → jobResult(含 resultUrl)或 jobError。取消用 jobError(artistCanceled 语义),回执 artistCancelConfirmation。
通过创意工作流 REST 提交
POSThttps://rcn.reelway.ai/v1/creative-agent/workflows鉴权:凭证
两段式创建 + 幂等;输入 ≤1 MiB;严格解码
curl --fail-with-body https://rcn.reelway.ai/v1/creative-agent/workflows \
-H "api-key: $REELWAY_API_KEY" \
-H "Idempotency-Key: recipe-t2v-$(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"steps": [
{
"id": "video",
"tool": "generate_video",
"input": {
"model": "minimax-h3-fl2va-fp8_t2v_turbo",
"prompt": "一只橘猫在雨后的屋顶上伸懒腰"
}
}
]
}'
- 响应
201 返回工作流形状(含 steps[] 与状态);订阅 GET …/{id}/events/stream(SSE)获取进度与产物。
- 请求体严格解码,任何未知字段返回
400(1010)。
- 同一
Idempotency-Key 重放返回首次响应;同键不同体返回 422(1012)。
- DAG 校验:
dependsOn 指向不存在的 step → 422(1008);存在环或指向更晚的 step → 422(1007)。
完整端点族见创意工作流。
费用与失败
- 项目在受理时按预估扣费,完成后按实际用量校正;
jobError 或无产物的任务不计费。
- 模型不在目录 →
400(1002);该模型 × 分辨率桶没有价格行 → 400(1014);余额不足 → 402(1005)。
- 产物
resultUrl 为 48 小时有效的签名 URL;需要长期保存请及时下载,或用 GET /v1/image|media/downloadUrl 重新签发(见媒体与图像 URL)。