n8n-io/n8n · error · NodeOperationError
Failed to create video task: ${createResponse.base_resp?.sta
Error message
Failed to create video task: ${createResponse.base_resp?.status_msg || 'Unknown error'} What it means
Thrown by the MiniMax image-to-video (i2v) operation after POST /video_generation when createResponse.base_resp.status_code is non-zero. Same base_resp pattern as other MiniMax operations: status_msg carries the upstream reason, 'Unknown error' is the fallback. This specifically covers task creation rejection — the asynchronous video job was never accepted.
Source
Thrown at packages/@n8n/nodes-langchain/nodes/vendors/MiniMax/actions/video/generate.i2v.operation.ts:330
body.subject_reference = [
{
image: await resolveImageInput(
this,
itemIndex,
subjectRefInputType,
(options.subjectReferenceImageUrl as string) || '',
(options.subjectReferenceBinaryPropertyName as string) || 'subjectReference',
),
},
];
}
const createResponse = (await apiRequest.call(this, 'POST', '/video_generation', {
body,
})) as VideoGenerationResponse;
if (createResponse.base_resp?.status_code !== 0) {
throw new NodeOperationError(
this.getNode(),
`Failed to create video task: ${createResponse.base_resp?.status_msg || 'Unknown error'}`,
);
}
const taskId = createResponse.task_id;
if (!taskId) {
throw new NodeOperationError(
this.getNode(),
'No task_id returned from video generation request',
);
}
const { fileId } = await pollVideoTask.call(this, taskId);
const videoUrl = await getVideoDownloadUrl.call(this, fileId);
const jsonData: IDataObject = {
videoUrl,View on GitHub (pinned to 5ac6606e81)
Solutions
- Read status_msg in the error for the exact rejection reason.
- Verify reference image URLs are publicly reachable and in a supported format (PNG/JPEG).
- Confirm model and resolution are enabled for the account tier.
- Check video-generation credits and API key scopes.
- Ensure the binary property names in options match the actual item binary keys.
Defensive patterns
Strategy: validation
Validate before calling
const SUPPORTED_I2V_MODELS = ['video-01-live2d', 'video-01'] as const;
const SUPPORTED_RESOLUTIONS = ['720p', '1080p'] as const;
function validateI2vInput(opts: {
model?: string; resolution?: string;
firstFrameImageUrl?: string; firstFrameBinaryPropertyName?: string;
subjectReferenceImageUrl?: string;
}) {
if (opts.model && !SUPPORTED_I2V_MODELS.includes(opts.model as never)) return `model '${opts.model}' is not recognized for i2v`;
if (opts.resolution && !SUPPORTED_RESOLUTIONS.includes(opts.resolution as never)) return `resolution '${opts.resolution}' is not recognized`;
const hasFirstFrame = !!opts.firstFrameImageUrl || !!opts.firstFrameBinaryPropertyName;
if (!hasFirstFrame && !opts.subjectReferenceImageUrl) {
return 'i2v requires a first frame or subject reference image';
}
return null;
} Type guard
function isPublicImageUrl(u: unknown): u is string {
if (typeof u !== 'string' || u.length === 0) return false;
try { const p = new URL(u); return p.protocol === 'http:' || p.protocol === 'https:'; } catch { return false; }
} Try / catch
const createResponse = (await apiRequest.call(this, 'POST', '/video_generation', { body })) as VideoGenerationResponse;
if (createResponse.base_resp?.status_code !== 0) {
throw new NodeOperationError(
this.getNode(),
`Failed to create video task: ${createResponse.base_resp?.status_msg || 'Unknown error'}`,
);
} Prevention
- Ensure reference image URLs are public and unexpired before the call — MiniMax must fetch them.
- Confirm model and resolution are enabled for the account tier before deploying.
- Match binary property names to the actual item binary keys (defaults 'firstFrame' / 'subjectReference').
- Monitor video-generation credits and API key scopes.
When it happens
Trigger: Reference image URL unreachable or in an unsupported format; prompt triggers moderation; model/resolution/first_frame_image combination unsupported; account out of video-generation credits; API key lacks video permission; subject/first-frame image binary property empty.
Common situations: Signed URL in subjectReferenceImageUrl expired before MiniMax fetched it; resolution not enabled for the account tier; prompt disallowed; binary property name mismatch (defaults to 'subjectReference' / 'firstFrame'); quota exhausted.
Related errors
- Failed to create video task: ${createResponse.base_resp?.sta
- No task_id returned from video generation request
- ${response.error.message}
- Text-to-speech failed: ${response.base_resp?.status_msg || '
- Image generation failed: ${response.base_resp?.status_msg ||
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/d377fbfea8a3def1.
Report an issue: GitHub.