diff --git a/src/components/SplitGridSettingsModal.tsx b/src/components/SplitGridSettingsModal.tsx
index 1d4895cb..c26ff4ab 100644
--- a/src/components/SplitGridSettingsModal.tsx
+++ b/src/components/SplitGridSettingsModal.tsx
@@ -20,10 +20,12 @@ const LAYOUT_OPTIONS = [
{ rows: 2, cols: 5 },
] as const;
-const ASPECT_RATIOS: AspectRatio[] = ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"];
+const BASE_ASPECT_RATIOS: AspectRatio[] = ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"];
+const EXTENDED_ASPECT_RATIOS: AspectRatio[] = ["1:1", "1:4", "1:8", "2:3", "3:2", "3:4", "4:1", "4:3", "4:5", "5:4", "8:1", "9:16", "16:9", "21:9"];
const RESOLUTIONS: Resolution[] = ["1K", "2K", "4K"];
const MODELS: { value: ModelType; label: string }[] = [
{ value: "nano-banana", label: "Nano Banana" },
+ { value: "nano-banana-2", label: "Nano Banana 2" },
{ value: "nano-banana-pro", label: "Nano Banana Pro" },
];
@@ -50,7 +52,8 @@ export function SplitGridSettingsModal({
const { rows, cols } = LAYOUT_OPTIONS[selectedLayoutIndex];
const targetCount = rows * cols;
- const isNanoBananaPro = model === "nano-banana-pro";
+ const isNanoBananaPro = model === "nano-banana-pro" || model === "nano-banana-2";
+ const aspectRatios = model === "nano-banana-2" ? EXTENDED_ASPECT_RATIOS : BASE_ASPECT_RATIOS;
const handleCreate = useCallback(() => {
const splitNode = getNodeById(nodeId);
@@ -279,7 +282,7 @@ export function SplitGridSettingsModal({
onChange={(e) => setAspectRatio(e.target.value as AspectRatio)}
className="w-full px-3 py-2 bg-neutral-900 border border-neutral-600 rounded text-neutral-100 text-sm focus:outline-none focus:border-neutral-500"
>
- {ASPECT_RATIOS.map((ar) => (
+ {aspectRatios.map((ar) => (
))}
diff --git a/src/components/nodes/GenerateImageNode.tsx b/src/components/nodes/GenerateImageNode.tsx
index 860b07b7..da306607 100644
--- a/src/components/nodes/GenerateImageNode.tsx
+++ b/src/components/nodes/GenerateImageNode.tsx
@@ -14,8 +14,11 @@ import { useToast } from "@/components/Toast";
import { getImageDimensions, calculateNodeSizePreservingHeight } from "@/utils/nodeDimensions";
import { ProviderBadge } from "./ProviderBadge";
-// All 10 aspect ratios supported by both models
-const ASPECT_RATIOS: AspectRatio[] = ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"];
+// Base 10 aspect ratios (all Gemini image models)
+const BASE_ASPECT_RATIOS: AspectRatio[] = ["1:1", "2:3", "3:2", "3:4", "4:3", "4:5", "5:4", "9:16", "16:9", "21:9"];
+
+// Extended 14 aspect ratios (Nano Banana 2 adds extreme ratios)
+const EXTENDED_ASPECT_RATIOS: AspectRatio[] = ["1:1", "1:4", "1:8", "2:3", "3:2", "3:4", "4:1", "4:3", "4:5", "5:4", "8:1", "9:16", "16:9", "21:9"];
// Resolutions for Nano Banana Pro and Nano Banana 2
const RESOLUTIONS: Resolution[] = ["512", "1K", "2K", "4K"];
@@ -394,6 +397,7 @@ export function GenerateImageNode({ id, data, selected }: NodeProps 1;
// Track previous status to detect error transitions
@@ -689,7 +693,7 @@ export function GenerateImageNode({ id, data, selected }: NodeProps
- {ASPECT_RATIOS.map((ratio) => (
+ {aspectRatios.map((ratio) => (
diff --git a/src/types/models.ts b/src/types/models.ts
index f8928ca9..7bc85261 100644
--- a/src/types/models.ts
+++ b/src/types/models.ts
@@ -5,15 +5,19 @@
* aspect ratios, resolutions, and model identifiers.
*/
-// Aspect Ratios (supported by both Nano Banana and Nano Banana Pro)
+// Aspect Ratios (all models support the base 10; Nano Banana 2 adds 1:4, 1:8, 4:1, 8:1)
export type AspectRatio =
| "1:1"
+ | "1:4"
+ | "1:8"
| "2:3"
| "3:2"
| "3:4"
+ | "4:1"
| "4:3"
| "4:5"
| "5:4"
+ | "8:1"
| "9:16"
| "16:9"
| "21:9";