{"record":{"id":"cff72c8d5aa3ff75","repo":"n8n-io/n8n","slug":"model-model-is-not-supported-for-video-generati","errorCode":null,"errorMessage":"Model ${model} is not supported for video generation. Please use a Veo model","messagePattern":"Model (.+?) is not supported for video generation\\. Please use a Veo model","errorType":"exception","errorClass":"NodeOperationError","httpStatus":null,"severity":"error","filePath":"packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/actions/video/generate.operation.ts","lineNumber":148,"sourceCode":"export async function execute(this: IExecuteFunctions, i: number): Promise<INodeExecutionData[]> {\n\tconst model = this.getNodeParameter('modelId', i, '', { extractValue: true }) as string;\n\tconst prompt = this.getNodeParameter('prompt', i, '') as string;\n\tif (!prompt.trim()) {\n\t\tthrow new NodeOperationError(this.getNode(), 'A non-empty prompt is required.', {\n\t\t\titemIndex: i,\n\t\t});\n\t}\n\tconst returnAs = this.getNodeParameter('returnAs', i, 'video');\n\tconst options = this.getNodeParameter('options', i, {});\n\tconst binaryPropertyOutput = this.getNodeParameter(\n\t\t'options.binaryPropertyOutput',\n\t\ti,\n\t\t'data',\n\t) as string;\n\tconst credentials = await this.getCredentials('googlePalmApi');\n\n\tif (!model.includes('veo')) {\n\t\tthrow new NodeOperationError(\n\t\t\tthis.getNode(),\n\t\t\t`Model ${model} is not supported for video generation. Please use a Veo model`,\n\t\t\t{\n\t\t\t\tdescription: 'Video generation is only supported by Veo models',\n\t\t\t},\n\t\t);\n\t}\n\n\tconst body = {\n\t\tinstances: [\n\t\t\t{\n\t\t\t\tprompt,\n\t\t\t},\n\t\t],\n\t\tparameters: {\n\t\t\taspectRatio: options.aspectRatio,\n\t\t\tpersonGeneration: options.personGeneration,\n\t\t\tsampleCount: options.sampleCount ?? 1,","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/n8n-io/n8n/blob/5ac6606e81f67bb9534255570cd4e86fd8101eee/packages/@n8n/nodes-langchain/nodes/vendors/GoogleGemini/actions/video/generate.operation.ts#L130-L166","documentation":"Model gate in 'video / generate': after the prompt check and credential lookup, if the resolved model id does not contain the substring 'veo', the node refuses to call predictLongRunning. Video generation is only supported by Veo models, so any Gemini/Imagen/text id is blocked here with a hint to use Veo.","triggerScenarios":"Model is set to a non-Veo id: a Gemini text/vision model, an Imagen id, or a typo'd Veo id like 'models/veo‑lite' that doesn't actually contain 'veo' (note the dash variant). The check is a naive substring match on 'veo'.","commonSituations":"Default model not switched to Veo when changing Resource to Video; copy-pasted model id from the Gemini docs; expression returns a model meant for another resource.","solutions":["Set Model to a Veo id, e.g. 'models/veo-3.0-generate-preview' (the id must contain the literal 'veo').","If model is expression-driven, confirm the resolved value includes 'veo' at runtime.","When switching Resource to Video, re-pick the model from the list so it's scoped to Veo."],"exampleFix":"// before\nconst model = 'models/gemini-2.0-flash';\n\n// after\nconst model = 'models/veo-3.0-generate-preview';","handlingStrategy":"validation","validationCode":"const model = String(this.getNodeParameter('modelId', i, '', { extractValue: true }));\nif (!model.toLowerCase().includes('veo')) {\n  throw new Error(`Video generation requires a Veo model, got: ${model}`);\n}","typeGuard":"function isVeoModel(model: string): boolean {\n  return model.toLowerCase().includes('veo');\n}","tryCatchPattern":null,"preventionTips":["Scope the Model RLC to Veo ids when the Resource is Video.","When switching Resource to Video, always re-pick the model.","Validate expression-driven model ids at runtime before this node runs."],"tags":["google-gemini","video-generation","veo","model-id","validation","node-operation-error"],"backgroundTag":null,"analyzedSha":"5ac6606e81f67bb9534255570cd4e86fd8101eee","analyzedAt":"2026-08-12T05:26:35.080Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}