feat(canvas): add video-prompt node and enhance video generation support

- 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.
This commit is contained in:
2026-04-07 08:50:59 +02:00
parent 456b910532
commit ed08b976f9
28 changed files with 2899 additions and 9 deletions

View File

@@ -125,6 +125,29 @@
"failed": "Fehlgeschlagen"
}
},
"videoPromptNode": {
"label": "KI-Video",
"promptPlaceholder": "Beschreibe dein Video...",
"promptFromTextNode": "Prompt aus Text-Node",
"modelLabel": "Modell",
"durationLabel": "Laenge",
"duration5s": "5 Sek.",
"duration10s": "10 Sek.",
"generateButton": "Video generieren",
"insufficientCredits": "Nicht genug Credits",
"noPromptHint": "Prompt eingeben oder Text-Node verbinden"
},
"aiVideoNode": {
"label": "KI-Video-Ausgabe",
"idleHint": "Verbinde eine KI-Video-Node und starte dort die Generierung.",
"generating": "Video wird generiert...",
"retryButton": "Erneut versuchen",
"downloadButton": "Video herunterladen",
"modelMeta": "Modell: {model}",
"durationMeta": "{duration} Sek.",
"creditMeta": "{credits} Credits",
"errorFallback": "Video-Generierung fehlgeschlagen"
},
"credits": {
"balance": "Guthaben",
"available": "Verfügbar",
@@ -205,6 +228,8 @@
"contentPolicyDesc": "Versuche, den Prompt umzuformulieren.",
"timeoutTitle": "Generierung abgelaufen",
"timeoutDesc": "Credits wurden nicht abgebucht.",
"providerIssuesTitle": "KI-Anbieter moeglicherweise gestoert",
"providerIssuesDesc": "Mehrere Bild- oder Video-Generierungen sind fehlgeschlagen.",
"openrouterIssuesTitle": "OpenRouter möglicherweise gestört",
"openrouterIssuesDesc": "Mehrere Generierungen fehlgeschlagen.",
"concurrentLimitReachedTitle": "Generierung bereits aktiv",

View File

@@ -125,6 +125,29 @@
"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",
@@ -205,6 +228,8 @@
"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",