diff --git a/CHANGELOG.md b/CHANGELOG.md index 614aab65f..2f0631805 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ This file is the release-notes source of truth for Marinara Engine. Reuse these ### Added +- Added optional image prompting instructions to image connections, applying them inside existing selfie and Illustrator prompt-writing calls before provider review or generation. - Added a Gallery image-agent picker that can run any active custom image-producing agent alongside the base Illustrator (#4846). - Added an editable Storyboard Agent shot-planner stage that inspects each generated keyframe before video generation, persists its suitability classification, and falls back to the planned motion when image-aware refinement is unavailable or invalid. The Storyboard Agent page now explains the four-stage prompt workflow and orders its shared prompt editors from illustration through image-aware grounding to video generation (#4839, Pasta-Devs/Marinara-Agents#296). - Added batch selection to Character and Persona image galleries so selected images can be downloaded or deleted together after confirmation (#4832). @@ -47,6 +48,7 @@ This file is the release-notes source of truth for Marinara Engine. Reuse these ### Fixed +- Scoped image-connection prompt instructions to image-producing agents, bounded stored instructions to 20,000 characters, and kept each retry agent on its own configured image connection. - Kept chat settings profiles within their saved chat mode, migrated legacy Visual Novel profiles to Roleplay on import, and prevented reusable profiles from overwriting branch identity (#4849). - Served the Home shell directly for unknown routes so Termux mobile launches cannot recurse through the server's 404 handler (#4850). - Corrected legacy Google Gemini `/v1` connection URLs to `/v1beta` for connection checks, model discovery, chat generation, and embeddings (#4854). diff --git a/packages/client/src/components/connections/ConnectionEditor.tsx b/packages/client/src/components/connections/ConnectionEditor.tsx index 961cbb18d..cc89fe673 100644 --- a/packages/client/src/components/connections/ConnectionEditor.tsx +++ b/packages/client/src/components/connections/ConnectionEditor.tsx @@ -95,6 +95,8 @@ import { sanitizeImageGenerationProfile, sanitizeVideoGenerationProfile, suggestImageStyleProfileIdForModel, + MAX_IMAGE_PROMPT_INSTRUCTIONS_LENGTH, + normalizeImagePromptInstructions, parseConnectionImageCaptioningDefaults, type APIProvider, type ComfyUiLoraSetting, @@ -299,6 +301,7 @@ export function ConnectionEditor() { const [localComfyuiWorkflow, setLocalComfyuiWorkflow] = useState(""); const [localImageService, setLocalImageService] = useState(null); const [localImageEndpointId, setLocalImageEndpointId] = useState(""); + const [localImagePromptInstructions, setLocalImagePromptInstructions] = useState(""); const [localImageGenerationQuality, setLocalImageGenerationQuality] = useState("auto"); const [localVideoGenerationSource, setLocalVideoGenerationSource] = useState(""); const [localVideoService, setLocalVideoService] = useState(null); @@ -418,6 +421,7 @@ export function ConnectionEditor() { setLocalComfyuiWorkflow((c.comfyuiWorkflow as string) ?? ""); setLocalImageService(imageService); setLocalImageEndpointId((c.imageEndpointId as string) ?? ""); + setLocalImagePromptInstructions((c.imagePromptInstructions as string) ?? ""); setLocalImageGenerationQuality( c.imageGenerationQuality === "low" || c.imageGenerationQuality === "medium" || c.imageGenerationQuality === "high" ? c.imageGenerationQuality @@ -719,6 +723,7 @@ export function ConnectionEditor() { imageService: isImageProvider ? localImageGenerationSource || localImageService || null : null, imageEndpointId: isImageProvider && selectedImageService === "runpod_comfyui" ? localImageEndpointId || null : null, + imagePromptInstructions: isImageProvider ? normalizeImagePromptInstructions(localImagePromptInstructions) : null, imageGenerationQuality: isImageProvider ? localImageGenerationQuality : "auto", videoGenerationSource: isVideoProvider ? selectedVideoProvider || null : null, videoService: isVideoProvider ? selectedVideoDefaultsService : null, @@ -818,6 +823,7 @@ export function ConnectionEditor() { localComfyuiWorkflow, localImageService, localImageEndpointId, + localImagePromptInstructions, localImageGenerationQuality, localMaxTokensOverride, localClaudeFastMode, @@ -923,6 +929,7 @@ export function ConnectionEditor() { videoService, imageEndpointId: isImageProvider && selectedImageService === "runpod_comfyui" ? localImageEndpointId || null : null, + imagePromptInstructions: isImageProvider ? normalizeImagePromptInstructions(localImagePromptInstructions) : null, imageGenerationQuality: isImageProvider ? localImageGenerationQuality : "auto", comfyuiWorkflow: isImageProvider || (isVideoProvider && videoProvider === "comfyui") ? localComfyuiWorkflow || null : null, @@ -961,6 +968,7 @@ export function ConnectionEditor() { selectedVideoProvider, selectedImageService, localImageEndpointId, + localImagePromptInstructions, localImageGenerationQuality, localComfyuiWorkflow, localClaudeFastMode, @@ -2008,6 +2016,25 @@ export function ConnectionEditor() { )} + {localProvider === "image_generation" && ( + } + help={localizeUi("ui.connections.connectioneditor.imagePromptingInstructionsHelp")} + > +