- Introduced a new node type "video-prompt" for AI video generation, including its integration into the canvas command palette and node template picker. - Updated connection validation to allow connections from text nodes to video-prompt and from video-prompt to ai-video nodes. - Enhanced error handling and messaging for video generation failures, including specific cases for provider issues. - Added tests to validate new video-prompt functionality and connection policies. - Updated localization files to include new labels and prompts for video-prompt and ai-video nodes.
300 lines
11 KiB
JSON
300 lines
11 KiB
JSON
{
|
|
"common": {
|
|
"save": "Save",
|
|
"reset": "Reset",
|
|
"cancel": "Cancel",
|
|
"delete": "Delete",
|
|
"close": "Close",
|
|
"confirm": "Confirm",
|
|
"loading": "Loading…",
|
|
"error": "Error",
|
|
"success": "Success",
|
|
"back": "Back",
|
|
"next": "Next",
|
|
"upgrade": "Upgrade"
|
|
},
|
|
"auth": {
|
|
"signIn": "Sign in",
|
|
"signOut": "Sign out",
|
|
"magicLink": "Magic link",
|
|
"magicLinkSent": "Magic link sent",
|
|
"emailLabel": "Email address",
|
|
"emailPlaceholder": "you@email.com"
|
|
},
|
|
"dashboard": {
|
|
"title": "Dashboard",
|
|
"newCanvas": "New canvas",
|
|
"recentlyOpened": "Recently opened",
|
|
"templates": "Templates",
|
|
"noCanvases": "No canvases found",
|
|
"lastEdited": "Last edited",
|
|
"nodeCount": "{count, plural, one {# Node} other {# Nodes}}"
|
|
},
|
|
"canvas": {
|
|
"autosaved": "Autosaved",
|
|
"share": "Share",
|
|
"credits": "Credits",
|
|
"zoomFit": "Fit to window",
|
|
"addNode": "Add node",
|
|
"sidebar": {
|
|
"properties": "Properties",
|
|
"layers": "Layer",
|
|
"filters": "Filters",
|
|
"actions": "Actions"
|
|
}
|
|
},
|
|
"nodes": {
|
|
"image": "Image",
|
|
"aiImage": "AI image",
|
|
"curves": "Curves",
|
|
"render": "Render",
|
|
"compare": "Compare",
|
|
"compareAction": "Compare",
|
|
"compareClose": "Close",
|
|
"compareCurrent": "Current",
|
|
"compareOriginal": "Original",
|
|
"compareProcessed": "Processed",
|
|
"custom": "Custom",
|
|
"customize": "Customize",
|
|
"adjustments": {
|
|
"common": {
|
|
"presetPlaceholder": "Preset",
|
|
"presetNamePrompt": "Preset name",
|
|
"builtinPresetLabel": "Built-in: {name}",
|
|
"userPresetLabel": "User: {name}"
|
|
},
|
|
"curves": {
|
|
"title": "Curves",
|
|
"sliders": {
|
|
"blackPoint": "Black Point",
|
|
"whitePoint": "White Point",
|
|
"gamma": "Gamma"
|
|
}
|
|
},
|
|
"colorAdjust": {
|
|
"title": "Color",
|
|
"sliders": {
|
|
"hue": "Hue",
|
|
"saturation": "Saturation",
|
|
"luminance": "Luminance",
|
|
"temperature": "Temperature",
|
|
"tint": "Tint",
|
|
"vibrance": "Vibrance"
|
|
}
|
|
},
|
|
"lightAdjust": {
|
|
"title": "Light",
|
|
"sliders": {
|
|
"brightness": "Brightness",
|
|
"contrast": "Contrast",
|
|
"exposure": "Exposure",
|
|
"highlights": "Highlights",
|
|
"shadows": "Shadows",
|
|
"whites": "Whites",
|
|
"blacks": "Blacks",
|
|
"vignette": "Vignette"
|
|
}
|
|
},
|
|
"detailAdjust": {
|
|
"title": "Detail",
|
|
"sliders": {
|
|
"sharpen": "Sharpen",
|
|
"radius": "Radius",
|
|
"threshold": "Threshold",
|
|
"clarity": "Clarity",
|
|
"denoiseLuma": "Denoise Luma",
|
|
"denoiseColor": "Denoise Color",
|
|
"grain": "Grain"
|
|
}
|
|
}
|
|
},
|
|
"prompts": {
|
|
"prompt1": "Prompt 1",
|
|
"prompt2": "Prompt 2",
|
|
"negative": "Negative",
|
|
"style": "Style",
|
|
"aspectRatio": "Aspect ratio",
|
|
"imageSize": "Image size",
|
|
"quality": "Quality",
|
|
"seed": "Seed"
|
|
},
|
|
"status": {
|
|
"pending": "Pending",
|
|
"processing": "Processing",
|
|
"completed": "Completed",
|
|
"failed": "Failed"
|
|
}
|
|
},
|
|
"videoPromptNode": {
|
|
"label": "AI video",
|
|
"promptPlaceholder": "Describe your video...",
|
|
"promptFromTextNode": "Prompt from text node",
|
|
"modelLabel": "Model",
|
|
"durationLabel": "Length",
|
|
"duration5s": "5 sec",
|
|
"duration10s": "10 sec",
|
|
"generateButton": "Generate video",
|
|
"insufficientCredits": "Not enough credits",
|
|
"noPromptHint": "Enter a prompt or connect a text node"
|
|
},
|
|
"aiVideoNode": {
|
|
"label": "AI video output",
|
|
"idleHint": "Connect an AI video node and start generation there.",
|
|
"generating": "Generating video...",
|
|
"retryButton": "Try again",
|
|
"downloadButton": "Download video",
|
|
"modelMeta": "Model: {model}",
|
|
"durationMeta": "{duration} sec",
|
|
"creditMeta": "{credits} credits",
|
|
"errorFallback": "Video generation failed"
|
|
},
|
|
"credits": {
|
|
"balance": "Balance",
|
|
"available": "Available",
|
|
"reserved": "Reserved",
|
|
"topUp": "Top up",
|
|
"upgrade": "Upgrade",
|
|
"renewsOn": "Renews on",
|
|
"insufficientCredits": "Insufficient credits",
|
|
"transactionHistory": "Transaction history"
|
|
},
|
|
"pricing": {
|
|
"free": "Free",
|
|
"starter": "Starter",
|
|
"pro": "Pro",
|
|
"max": "Max",
|
|
"perMonth": "/month",
|
|
"creditsPerMonth": "Credits per month",
|
|
"currentPlan": "Current plan",
|
|
"choosePlan": "Choose plan"
|
|
},
|
|
"errors": {
|
|
"generic": "Something went wrong — please try again.",
|
|
"networkError": "Connection error — check your internet connection.",
|
|
"timeout": "Timeout — credits were not charged.",
|
|
"insufficientCredits": "Not enough credits for this operation.",
|
|
"rateLimited": "Too many requests — please wait a moment.",
|
|
"unauthorized": "Not signed in — please sign in.",
|
|
"modelUnavailable": "Model currently unavailable — please choose another.",
|
|
"contentPolicy": "Request blocked by content policy.",
|
|
"invalidRequest": "Invalid request — please check your input.",
|
|
"dailyCap": "Daily limit reached — try again tomorrow.",
|
|
"concurrency": "Generation already active — please wait.",
|
|
"nodeError": "Node error",
|
|
"uploadFailed": "Upload failed",
|
|
"creditsTestDisabled": "Test credits are disabled.",
|
|
"creditsInvalidAmount": "Invalid amount.",
|
|
"creditsBalanceNotFound": "No credit balance found.",
|
|
"creditsDailyCapReached": "Daily limit reached — try again tomorrow.",
|
|
"creditsConcurrencyLimit": "Generation already active — please wait.",
|
|
"openrouterMissingMessage": "OpenRouter: Invalid response.",
|
|
"openrouterModelRefusal": "Model refused — {reason}.",
|
|
"openrouterNoImageInResponse": "OpenRouter: No image in response.",
|
|
"openrouterImageUrlLoadFailed": "OpenRouter: Could not load image URL.",
|
|
"openrouterDataUriCreationFailed": "OpenRouter: Could not process image.",
|
|
"openrouterDataUriMissingBase64": "OpenRouter: Could not process image."
|
|
},
|
|
"toasts": {
|
|
"canvas": {
|
|
"imageUploaded": "Image uploaded",
|
|
"adjustmentPresetSaved": "Preset saved",
|
|
"uploadFailed": "Upload failed",
|
|
"uploadFormatError": "Format \"{format}\" is not supported. Allowed: PNG, JPG, WebP.",
|
|
"uploadSizeError": "Maximum file size: {maxMb} MB.",
|
|
"nodeRemoved": "Item removed",
|
|
"nodesRemoved": "{count, plural, one {Item removed} other {# Items removed}}",
|
|
"nodeDeleteBlockedTitle": "Cannot delete right now",
|
|
"nodeDeleteBlockedDesc": "Please wait a moment and try again.",
|
|
"nodeDeleteOptimisticTitle": "Item is still being created",
|
|
"nodeDeleteOptimisticDesc": "This item hasn't finished syncing to the server yet. Once synchronization is complete, you can delete it.",
|
|
"nodeDeleteBlockedMultiDesc": "At least one item is still being created. Please wait and try again.",
|
|
"nodeDeleteBlockedPartialTitle": "Not all items removed",
|
|
"nodeDeleteBlockedPartialSuffixOne": "One item couldn't be deleted; the rest of the selection was removed.",
|
|
"nodeDeleteBlockedPartialSuffixOther": "{count} items couldn't be deleted; the rest of the selection was removed."
|
|
},
|
|
"ai": {
|
|
"generating": "Generating image…",
|
|
"generated": "Image generated",
|
|
"generatedDesc": "{credits} credits used",
|
|
"generationQueued": "Generation started",
|
|
"generationQueuedDesc": "The image will appear automatically when it's ready.",
|
|
"generationFailed": "Generation failed",
|
|
"creditsNotCharged": "Credits were not charged",
|
|
"insufficientCreditsTitle": "Insufficient credits",
|
|
"insufficientCreditsDesc": "{needed} credits needed, {available} available.",
|
|
"modelUnavailableTitle": "Model temporarily unavailable",
|
|
"modelUnavailableDesc": "Try a different model or try again later.",
|
|
"contentPolicyTitle": "Request blocked by content policy",
|
|
"contentPolicyDesc": "Try rephrasing your prompt.",
|
|
"timeoutTitle": "Generation timed out",
|
|
"timeoutDesc": "Credits were not charged.",
|
|
"providerIssuesTitle": "AI providers may be experiencing issues",
|
|
"providerIssuesDesc": "Several image or video generations have failed.",
|
|
"openrouterIssuesTitle": "OpenRouter may be experiencing issues",
|
|
"openrouterIssuesDesc": "Several generations have failed.",
|
|
"concurrentLimitReachedTitle": "Generation already active",
|
|
"concurrentLimitReachedDesc": "Please wait until the current generation completes."
|
|
},
|
|
"export": {
|
|
"frameExported": "Frame exported",
|
|
"exportingFrames": "Exporting frames…",
|
|
"zipReady": "ZIP ready",
|
|
"exportFailed": "Export failed",
|
|
"frameEmptyTitle": "Export failed",
|
|
"frameEmptyDesc": "Frame has no visible content.",
|
|
"noFramesOnCanvasTitle": "Export failed",
|
|
"noFramesOnCanvasDesc": "No frames on canvas — create one first.",
|
|
"download": "Download",
|
|
"downloaded": "Downloaded!"
|
|
},
|
|
"auth": {
|
|
"welcomeBack": "Welcome back",
|
|
"welcomeOnDashboard": "Great to have you here",
|
|
"checkEmailTitle": "Check your email",
|
|
"checkEmailDesc": "Confirmation link sent to {email}.",
|
|
"sessionExpiredTitle": "Session expired",
|
|
"sessionExpiredDesc": "Please sign in again.",
|
|
"signedOut": "Signed out",
|
|
"signIn": "Sign in",
|
|
"initialSetupTitle": "Starting credits activated",
|
|
"initialSetupDesc": "You're ready to go."
|
|
},
|
|
"billing": {
|
|
"subscriptionActivatedTitle": "Subscription activated",
|
|
"subscriptionActivatedDesc": "{credits} credits added to your balance.",
|
|
"creditsAddedTitle": "Credits added",
|
|
"creditsAddedDesc": "+{credits} credits",
|
|
"subscriptionCancelledTitle": "Subscription cancelled",
|
|
"subscriptionCancelledDesc": "Your credits remain available until {periodEnd}.",
|
|
"paymentFailedTitle": "Payment failed",
|
|
"paymentFailedDesc": "Please update your payment method.",
|
|
"dailyLimitReachedTitle": "Daily limit reached",
|
|
"dailyLimitReachedDesc": "Maximum {limit} generations per day in your plan.",
|
|
"lowCreditsTitle": "Credits running low",
|
|
"lowCreditsDesc": "{remaining} credits remaining.",
|
|
"topUp": "Top up",
|
|
"upgrade": "Upgrade",
|
|
"manage": "Manage",
|
|
"redirectingToCheckoutTitle": "Redirecting…",
|
|
"redirectingToCheckoutDesc": "You're being redirected to secure checkout.",
|
|
"openingPortalTitle": "Opening portal…",
|
|
"openingPortalDesc": "You're being redirected to subscription management.",
|
|
"testGrantFailedTitle": "Credit grant failed"
|
|
},
|
|
"system": {
|
|
"reconnected": "Connection restored",
|
|
"connectionLostTitle": "Connection lost",
|
|
"connectionLostDesc": "Changes may not be saved.",
|
|
"copiedToClipboard": "Copied to clipboard"
|
|
},
|
|
"dashboard": {
|
|
"renameEmptyTitle": "Invalid name",
|
|
"renameEmptyDesc": "Name cannot be empty.",
|
|
"renameSuccess": "Workspace renamed",
|
|
"renameFailed": "Rename failed",
|
|
"deleteSuccess": "Workspace deleted",
|
|
"deleteFailed": "Delete failed"
|
|
}
|
|
}
|
|
}
|