{selectedPreviewResult.status === "running" ||
selectedPreviewResult.status === "submitting" ? (
diff --git a/lib/ai/reference-image-capability.ts b/lib/ai/reference-image-capability.ts
index d29d8b925..3da4e001d 100644
--- a/lib/ai/reference-image-capability.ts
+++ b/lib/ai/reference-image-capability.ts
@@ -1,4 +1,5 @@
type ModelDescriptor = {
+ displayName?: unknown;
modelId?: unknown;
supportsVision?: boolean | null;
capabilities?: unknown;
@@ -11,6 +12,8 @@ type ProviderDescriptor = {
const BFL_REFERENCE_IMAGE_MODEL_REGEX =
/^(?:bfl\/)?(?:flux-2-(?:max|flex|pro(?:-preview)?|klein-(?:4b|9b)(?:-preview)?)|flux-kontext-(?:pro|max))$/i;
+const REFERENCE_IMAGE_MODE_REGEX =
+ /^(?:image-edit|image-to-image|img2img|reference-images?|image-reference|reference-image)$/i;
function readStringField(source: unknown, key: string) {
if (!source || typeof source !== "object" || !(key in source)) return "";
@@ -28,14 +31,29 @@ function normalizeBflModelId(value: unknown) {
.replace(/[?#].*$/, "");
}
+function readStringArrayField(source: unknown, key: string) {
+ if (!source || typeof source !== "object" || !(key in source)) return [];
+ const value = (source as Record)[key];
+ if (!Array.isArray(value)) return [];
+ return value.map((item) => String(item || "").trim()).filter(Boolean);
+}
+
+function hasReferenceImageMode(value: unknown) {
+ if (!value || typeof value !== "object") return false;
+ const supportedModes = [
+ ...readStringArrayField(value, "supportedModes"),
+ ...readStringArrayField(value, "modes"),
+ ];
+ return supportedModes.some((mode) => REFERENCE_IMAGE_MODE_REGEX.test(mode));
+}
+
export function isKnownReferenceImageModel(
model: ModelDescriptor | null | undefined,
provider?: ProviderDescriptor | null
) {
const providerType = String(provider?.type || "").trim();
- if (providerType !== "bfl-image") return false;
-
const candidates = [
+ model?.displayName,
model?.modelId,
readStringField(model?.defaultParams, "endpoint"),
readStringField(model?.defaultParams, "submitEndpoint"),
@@ -51,9 +69,16 @@ export function isKnownReferenceImageModel(
candidates.push(readStringField(capabilitiesEndpoints, "submit"));
- return candidates
+ const matchesKnownBflModel = candidates
.map(normalizeBflModelId)
.some((modelId) => BFL_REFERENCE_IMAGE_MODEL_REGEX.test(modelId));
+ if (matchesKnownBflModel) return true;
+
+ if (providerType === "bfl-image") {
+ return hasReferenceImageMode(model?.capabilities) || hasReferenceImageMode(model?.defaultParams);
+ }
+
+ return false;
}
export function modelLacksReferenceImageInputSupport(