From bebb13f1d3430b03d028ed097baa919935af7bd9 Mon Sep 17 00:00:00 2001 From: shaoohh <150606856+shaoohh@users.noreply.github.com> Date: Mon, 3 Aug 2026 23:10:17 +0800 Subject: [PATCH] fix: enforce H3 reference input limit --- src/video/v2.ts | 7 +++++++ test/video/v2.test.ts | 15 +++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/video/v2.ts b/src/video/v2.ts index ad69c2b..127bb54 100644 --- a/src/video/v2.ts +++ b/src/video/v2.ts @@ -31,6 +31,8 @@ const VIDEO_V2_IMAGE_ROLES = new Set([ 'reference_image', ]); +const VIDEO_V2_MAX_REFERENCE_INPUTS = 12; + export class VideoV2InputError extends Error { constructor(message: string) { super(message); @@ -187,6 +189,11 @@ export function validateVideoV2Request(request: VideoV2Request): void { if (referenceImages.length > 9 || videos.length > 3 || audios.length > 3) { throw new VideoV2InputError('MiniMax-H3 accepts up to 9 reference images, 3 reference videos, and 3 reference audios.'); } + if (referenceImages.length + videos.length + audios.length > VIDEO_V2_MAX_REFERENCE_INPUTS) { + throw new VideoV2InputError( + `MiniMax-H3 accepts up to ${VIDEO_V2_MAX_REFERENCE_INPUTS} reference images, videos, and audios in total.`, + ); + } if (hasFrameInput && hasReferenceInput) { throw new VideoV2InputError('MiniMax-H3 frame inputs and reference inputs cannot be used together.'); } diff --git a/test/video/v2.test.ts b/test/video/v2.test.ts index 2d449d8..fe33813 100644 --- a/test/video/v2.test.ts +++ b/test/video/v2.test.ts @@ -152,6 +152,21 @@ describe('Video Generation V2 request builder', () => { })).toThrow('3 reference audios'); }); + it('enforces the combined reference input limit', () => { + expect(() => buildVideoV2Request({ + prompt, + images: referenceImages(9), + referenceVideos: referenceMedia(3, 'mp4'), + })).not.toThrow(); + + expect(() => buildVideoV2Request({ + prompt, + images: referenceImages(9), + referenceVideos: referenceMedia(3, 'mp4'), + referenceAudios: referenceMedia(1, 'mp3'), + })).toThrow('up to 12 reference images, videos, and audios in total'); + }); + it('rejects oversized Base64 image, video, and audio inputs', () => { expect(() => buildVideoV2Request({ prompt,