From ed9bfa9a54e957ceb2538118fd5ff53e49c4bdaf Mon Sep 17 00:00:00 2001 From: shrimbly Date: Fri, 9 Jan 2026 20:25:55 +1300 Subject: [PATCH] fix(03-01): improve Replicate capability inference to exclude video models Video models were getting text-to-image capability by default. Now properly detects video models (by keywords like video, animate, motion, luma, kling, minimax) and only assigns video capabilities. --- src/app/api/models/route.ts | 42 ++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/src/app/api/models/route.ts b/src/app/api/models/route.ts index 74a63be0..760a1d9e 100644 --- a/src/app/api/models/route.ts +++ b/src/app/api/models/route.ts @@ -138,32 +138,44 @@ type ModelsResponse = ModelsSuccessResponse | ModelsErrorResponse; // ============ Replicate Helpers ============ function inferReplicateCapabilities(model: ReplicateModel): ModelCapability[] { - const capabilities: ModelCapability[] = ["text-to-image"]; - + const capabilities: ModelCapability[] = []; const searchText = `${model.name} ${model.description ?? ""}`.toLowerCase(); - if ( - searchText.includes("img2img") || - searchText.includes("image-to-image") || - searchText.includes("inpaint") || - searchText.includes("controlnet") - ) { - capabilities.push("image-to-image"); - } - - if ( + // Check for video-related keywords first + const isVideoModel = searchText.includes("video") || searchText.includes("animate") || - searchText.includes("motion") - ) { + searchText.includes("motion") || + searchText.includes("luma") || + searchText.includes("kling") || + searchText.includes("minimax"); + + if (isVideoModel) { + // Video model - determine video capability type if ( searchText.includes("img2vid") || - searchText.includes("image-to-video") + searchText.includes("image-to-video") || + searchText.includes("i2v") ) { capabilities.push("image-to-video"); } else { capabilities.push("text-to-video"); } + } else { + // Image model - default to text-to-image + capabilities.push("text-to-image"); + + // Check for image-to-image capability + if ( + searchText.includes("img2img") || + searchText.includes("image-to-image") || + searchText.includes("inpaint") || + searchText.includes("controlnet") || + searchText.includes("upscale") || + searchText.includes("restore") + ) { + capabilities.push("image-to-image"); + } } return capabilities;