Add Activepieces integration for workflow automation

- Add Activepieces fork with SmoothSchedule custom piece
- Create integrations app with Activepieces service layer
- Add embed token endpoint for iframe integration
- Create Automations page with embedded workflow builder
- Add sidebar visibility fix for embed mode
- Add list inactive customers endpoint to Public API
- Include SmoothSchedule triggers: event created/updated/cancelled
- Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,69 @@
{
"AI-powered content generation platform for creating high-quality images and videos using text prompts": "AI-basierte Content-Generierungsplattform zur Erstellung von qualitativ hochwertigen Bildern und Videos mittels Text-Prompts",
"Your Runway API key. Get it from your Runway account settings.": "Dein Runway API Schlüssel. Erhalte ihn über deine Runway Account Einstellungen.",
"Generate Image From Text": "Bild aus Text generieren",
"Generate Video From Image": "Video aus Bild generieren",
"Get Task Details": "Aufgabendetails abrufen",
"Cancel or Delete Task": "Aufgabe abbrechen oder löschen",
"Generates an image using a text prompt via Runway's AI models": "Erzeugt ein Bild mit Hilfe einer Text-Prompt über Runway's KI-Modelle",
"Generates a video based on image(s) and text prompt using Runway's AI models": "Erzeugt ein Video basierend auf Bild(n) und Text-Prompt mit den KI-Modellen von Runway",
"Retrieve details of an existing Runway task by its ID": "Details einer bestehenden Runway-Aufgabe über deren ID abrufen",
"Cancel or delete a task. Running/pending tasks are cancelled, completed tasks are deleted.": "Abbrechen oder Löschen einer Aufgabe. Ausführliche/ausstehende Aufgaben werden abgebrochen, erledigte Aufgaben werden gelöscht.",
"Model": "Modell",
"Prompt": "Prompt",
"Image Ratio": "Bildverhältnis",
"Seed (Optional)": "Seed (optional)",
"Reference Images (Optional)": "Referenzbilder (optional)",
"Public Figure Detection": "Öffentliche Figurerkennung",
"Prompt Image File": "Bilddatei anfragen",
"Prompt Image URL": "Prompt Image URL",
"Image Position": "Bildposition",
"Prompt Text (Optional)": "Kurztext (optional)",
"Video Resolution": "Videoauflösung",
"Video Duration": "Video-Dauer",
"Content Moderation": "Moderation der Inhalte",
"Task ID": "Task ID",
"Download Output Files": "Ausgabedateien herunterladen",
"AI model to use for image generation": "KI-Modell für die Bildgenerierung",
"Describe what you want to see in the image (max 1000 characters)": "Beschreiben Sie, was Sie im Bild sehen möchten (max. 1000 Zeichen)",
"Resolution of the output image": "Auflösung des Ausgabebildes",
"Random seed for reproducible results (0-4294967295)": "Zufälliger Seed für reproduzierbare Ergebnisse (0-4294967295)",
"Up to 3 reference images (required for gen4_image_turbo)": "Bis zu 3 Referenzbilder (benötigt für gen4_image_turbo)",
"How strict content moderation should be for recognizable public figures": "Wie streng inhaltliche Moderation für erkennbare Persönlichkeiten sein soll",
"AI model to use for video generation": "KI-Modell für die Videoerzeugung",
"Upload an image file to use as the video's starting frame": "Bild-Datei hochladen, die als Startbild des Videos verwendet werden soll",
"HTTPS URL of an image to use as the video's starting frame": "HTTPS-URL eines Bildes zum Startbild des Videos",
"Position of the image in the video (last frame only supported by gen3a_turbo)": "Position des Bildes im Video (letzter Frame wird nur von gen3a_turbo unterstützt)",
"Describe what should happen in the video (max 1000 characters)": "Beschreiben Sie, was im Video passieren soll (max. 1000 Zeichen)",
"Available resolutions depend on the selected model": "Verfügbare Auflösungen hängen vom ausgewählten Modell ab",
"Available durations depend on the selected model": "Verfügbare Laufzeiten hängen vom ausgewählten Modell ab",
"Content moderation settings (not available for veo3)": "Moderationseinstellungen für Inhalte (nicht verfügbar für veo3)",
"The unique ID of the task to retrieve (UUID format)": "Die eindeutige ID der abzufragenden Aufgabe (UUID-Format)",
"Download and return the generated files as attachments (if task succeeded)": "Die generierten Dateien als Anhänge herunterladen und zurückgeben (falls die Aufgabe erfolgreich war)",
"The ID of the task to cancel or delete (UUID format)": "Die ID der Aufgabe zum Abbrechen oder Löschen (UUID-Format)",
"Gen4 Image (High Quality)": "Gen4-Bild (hohe Qualität)",
"Gen4 Image Turbo (Fast)": "Gen4 Bild Turbo (Schnell)",
"HD Landscape (1920x1080)": "HD Querformat (1920x1080)",
"HD Portrait (1080x1920)": "HD Hochformat (1080x1920)",
"Square (1024x1024)": "Quadrat (1024x1024)",
"Wide (1360x768)": "Breite (1360x768)",
"Square HD (1080x1080)": "Quadratische HD (1080x1080)",
"Standard Wide (1168x880)": "Standard Breite (1168x880)",
"Standard Landscape (1440x1080)": "Standard-Querformat (1440x1080)",
"Standard Portrait (1080x1440)": "Standard-Porträt (1080x1440)",
"Ultra Wide (1808x768)": "Ultra Breite (1808x768)",
"Cinema Wide (2112x912)": "Kinobreite (2112x912)",
"HD 720p (1280x720)": "HD 720p (1280x720)",
"HD 720p Portrait (720x1280)": "HD 720p Porträt (720x1280)",
"Square 720p (720x720)": "Quadrat 720p (720x720)",
"Standard (960x720)": "Standard (960x720)",
"Standard Portrait (720x960)": "Standard-Porträt (720x960)",
"Wide 720p (1680x720)": "Breite 720p (1680x720)",
"Auto (Recommended)": "Auto (empfohlen)",
"Low (Less Strict)": "Niedrig (weniger streng)",
"Gen4 Turbo (Fast, High Quality)": "Gen4 Turbo (Groß, hohe Qualität)",
"Gen3a Turbo (Balanced)": "Gen3a Turbo (ausgeglichen)",
"Veo3 (Google's Latest)": "Veo3 (Neueste von Google)",
"First Frame": "Erster Frame",
"Last Frame (gen3a_turbo only)": "Letzter Frame (gen3a_turbo nur)"
}

View File

@@ -0,0 +1,69 @@
{
"AI-powered content generation platform for creating high-quality images and videos using text prompts": "Plataforma de generación de contenidos impulsada por AIs para crear imágenes y vídeos de alta calidad usando indicaciones de texto",
"Your Runway API key. Get it from your Runway account settings.": "Tu clave API de Runway. Descárgala de la configuración de tu cuenta de Runway.",
"Generate Image From Text": "Generar imagen a partir de texto",
"Generate Video From Image": "Generar vídeo a partir de imagen",
"Get Task Details": "Obtener Detalles de Tarea",
"Cancel or Delete Task": "Cancelar o eliminar tarea",
"Generates an image using a text prompt via Runway's AI models": "Genera una imagen usando un mensaje de texto a través de modelos de IA de Runway",
"Generates a video based on image(s) and text prompt using Runway's AI models": "Genera un video basado en imagen(es) y un mensaje de texto usando los modelos de IA de Runway",
"Retrieve details of an existing Runway task by its ID": "Recuperar detalles de una tarea Runway existente por su ID",
"Cancel or delete a task. Running/pending tasks are cancelled, completed tasks are deleted.": "Cancelar o eliminar una tarea. Las tareas ejecutadas/pendientes se cancelan, las tareas completadas se eliminan.",
"Model": "Modelo",
"Prompt": "Petición",
"Image Ratio": "Ratio de imagen",
"Seed (Optional)": "Semilla (opcional)",
"Reference Images (Optional)": "Imágenes de referencia (opcional)",
"Public Figure Detection": "Detección de Figura Pública",
"Prompt Image File": "Archivo de imagen de Prompt",
"Prompt Image URL": "Prompt Image URL",
"Image Position": "Posición de la imagen",
"Prompt Text (Optional)": "Texto del aviso (opcional)",
"Video Resolution": "Resolución de vídeo",
"Video Duration": "Duración del vídeo",
"Content Moderation": "Moderación de contenido",
"Task ID": "Task ID",
"Download Output Files": "Descargar archivos de salida",
"AI model to use for image generation": "Modelo de IA a usar para la generación de imágenes",
"Describe what you want to see in the image (max 1000 characters)": "Describe lo que quieres ver en la imagen (máx. 1000 caracteres)",
"Resolution of the output image": "Resolución de la imagen de salida",
"Random seed for reproducible results (0-4294967295)": "Semilla aleatoria para resultados reproducibles (0-4294967295)",
"Up to 3 reference images (required for gen4_image_turbo)": "Hasta 3 imágenes de referencia (requeridas para gen4_image_turbo)",
"How strict content moderation should be for recognizable public figures": "Cuán estricta debe ser la moderación del contenido para las figuras públicas reconocibles",
"AI model to use for video generation": "Modelo de IA a usar para la generación de vídeo",
"Upload an image file to use as the video's starting frame": "Subir un archivo de imagen para usar como marco inicial del vídeo",
"HTTPS URL of an image to use as the video's starting frame": "URL HTTPS de una imagen a usar como fotograma inicial del vídeo",
"Position of the image in the video (last frame only supported by gen3a_turbo)": "Posición de la imagen en el video (último fotograma sólo soportado por gen3a_turbo)",
"Describe what should happen in the video (max 1000 characters)": "Describe lo que debe suceder en el video (máx. 1000 caracteres)",
"Available resolutions depend on the selected model": "Las resoluciones disponibles dependen del modelo seleccionado",
"Available durations depend on the selected model": "Las duraciones disponibles dependen del modelo seleccionado",
"Content moderation settings (not available for veo3)": "Configuración de moderación de contenido (no disponible para veo3)",
"The unique ID of the task to retrieve (UUID format)": "El ID único de la tarea a recuperar (formato UUID)",
"Download and return the generated files as attachments (if task succeeded)": "Descargar y devolver los archivos generados como archivos adjuntos (si la tarea tuvo éxito)",
"The ID of the task to cancel or delete (UUID format)": "El ID de la tarea a cancelar o eliminar (formato UUID)",
"Gen4 Image (High Quality)": "Imagen de Gen4 (Alta Calidad)",
"Gen4 Image Turbo (Fast)": "Imagen de Gen4 Turbo (rápido)",
"HD Landscape (1920x1080)": "HDH Landscape (1920x1080)",
"HD Portrait (1080x1920)": "HD vertical (1080x1920)",
"Square (1024x1024)": "Cuadrado (1024x1024)",
"Wide (1360x768)": "Ancho (1360x768)",
"Square HD (1080x1080)": "HD cuadrado (1080x1080)",
"Standard Wide (1168x880)": "Ancho Estándar (1168x880)",
"Standard Landscape (1440x1080)": "Paisaje Estándar (1440x1080)",
"Standard Portrait (1080x1440)": "Retrato Estándar (1080x1440)",
"Ultra Wide (1808x768)": "Ultra ancho (1808x768)",
"Cinema Wide (2112x912)": "Ancho de Cinema (2112x912)",
"HD 720p (1280x720)": "HD 720p (1280x720)",
"HD 720p Portrait (720x1280)": "Retrato HD 720p (720x1280)",
"Square 720p (720x720)": "Cuadrado 720p (720x720)",
"Standard (960x720)": "Estándar (960x720)",
"Standard Portrait (720x960)": "Retrato Estándar (720x960)",
"Wide 720p (1680x720)": "Ancho 720p (1680x720)",
"Auto (Recommended)": "Auto (recomendado)",
"Low (Less Strict)": "Baja (menos estricto)",
"Gen4 Turbo (Fast, High Quality)": "Gén4 Turbo (rápido, de alta calidad)",
"Gen3a Turbo (Balanced)": "Gen3a Turbo (equilibrado)",
"Veo3 (Google's Latest)": "Veo3 (último de Google)",
"First Frame": "Primer marco",
"Last Frame (gen3a_turbo only)": "Último fotograma (sólo gen3a_turbo)"
}

View File

@@ -0,0 +1,69 @@
{
"AI-powered content generation platform for creating high-quality images and videos using text prompts": "Plateforme de génération de contenu propulsée par l'IA pour créer des images et des vidéos de haute qualité à l'aide d'invite de texte",
"Your Runway API key. Get it from your Runway account settings.": "Votre clé API Runway. Obtenez-la depuis les paramètres de votre compte Runway.",
"Generate Image From Text": "Générer une image à partir du texte",
"Generate Video From Image": "Générer une vidéo à partir d'une image",
"Get Task Details": "Obtenir les détails de la tâche",
"Cancel or Delete Task": "Annuler ou supprimer la tâche",
"Generates an image using a text prompt via Runway's AI models": "Génère une image à l'aide d'une invite de texte via les modèles IA de Runway",
"Generates a video based on image(s) and text prompt using Runway's AI models": "Génère une vidéo basée sur la(les) image(s) et l'invite de texte en utilisant les modèles IA de Runway",
"Retrieve details of an existing Runway task by its ID": "Récupérer les détails d'une tâche existante par son ID",
"Cancel or delete a task. Running/pending tasks are cancelled, completed tasks are deleted.": "Annuler ou supprimer une tâche. Les tâches en cours/en attente sont annulées, les tâches terminées sont supprimées.",
"Model": "Modélisation",
"Prompt": "Prompt",
"Image Ratio": "Ratio d'image",
"Seed (Optional)": "Graine (facultatif)",
"Reference Images (Optional)": "Images de référence (facultatif)",
"Public Figure Detection": "Détection de Figure Publique",
"Prompt Image File": "Demander un fichier image",
"Prompt Image URL": "Prompt Image URL",
"Image Position": "Position de l'image",
"Prompt Text (Optional)": "Texte d'invitation (facultatif)",
"Video Resolution": "Résolution Vidéo",
"Video Duration": "Durée de la vidéo",
"Content Moderation": "Modération du contenu",
"Task ID": "Task ID",
"Download Output Files": "Télécharger les fichiers de sortie",
"AI model to use for image generation": "Modèle IA à utiliser pour la génération d'images",
"Describe what you want to see in the image (max 1000 characters)": "Décrivez ce que vous voulez voir dans l'image (max 1000 caractères)",
"Resolution of the output image": "Résolution de l'image de sortie",
"Random seed for reproducible results (0-4294967295)": "Graine aléatoire pour les résultats reproductibles (0-4294967295)",
"Up to 3 reference images (required for gen4_image_turbo)": "Jusqu'à 3 images de référence (requises pour gen4_image_turbo)",
"How strict content moderation should be for recognizable public figures": "La rigueur de la modération du contenu pour les personnalités publiques reconnaissables",
"AI model to use for video generation": "Modèle IA à utiliser pour la génération de vidéos",
"Upload an image file to use as the video's starting frame": "Télécharger un fichier image à utiliser comme cadre de départ de la vidéo",
"HTTPS URL of an image to use as the video's starting frame": "URL HTTPS d'une image à utiliser comme cadre de départ de la vidéo",
"Position of the image in the video (last frame only supported by gen3a_turbo)": "Position de l'image dans la vidéo (dernière image supportée uniquement par gen3a_turbo)",
"Describe what should happen in the video (max 1000 characters)": "Décrivez ce qui doit se passer dans la vidéo (max 1000 caractères)",
"Available resolutions depend on the selected model": "Les résolutions disponibles dépendent du modèle sélectionné",
"Available durations depend on the selected model": "Les durées disponibles dépendent du modèle sélectionné",
"Content moderation settings (not available for veo3)": "Paramètres de modération du contenu (non disponibles pour veo3)",
"The unique ID of the task to retrieve (UUID format)": "L'ID unique de la tâche à récupérer (format UUID)",
"Download and return the generated files as attachments (if task succeeded)": "Télécharger et renvoyer les fichiers générés en tant que pièces jointes (si la tâche a réussi)",
"The ID of the task to cancel or delete (UUID format)": "L'ID de la tâche à annuler ou supprimer (format UUID)",
"Gen4 Image (High Quality)": "Image Gen4 (haute qualité)",
"Gen4 Image Turbo (Fast)": "Turbo Image Gen4 (Rapide)",
"HD Landscape (1920x1080)": "Paysage HD (1920x1080)",
"HD Portrait (1080x1920)": "Portrait HD (1080x1920)",
"Square (1024x1024)": "Carré (1024x1024)",
"Wide (1360x768)": "Large (1360x768)",
"Square HD (1080x1080)": "HD carré (1080x1080)",
"Standard Wide (1168x880)": "Largeur standard (1168x880)",
"Standard Landscape (1440x1080)": "Paysage standard (1440x1080)",
"Standard Portrait (1080x1440)": "Portrait standard (1080x1440)",
"Ultra Wide (1808x768)": "Ultra large (1808x768)",
"Cinema Wide (2112x912)": "Grand cinéma (2112x912)",
"HD 720p (1280x720)": "HD 720p (1280x720)",
"HD 720p Portrait (720x1280)": "Portrait HD 720p (720x1280)",
"Square 720p (720x720)": "Carré 720p (720x720)",
"Standard (960x720)": "Standard (960x720)",
"Standard Portrait (720x960)": "Portrait standard (720x960)",
"Wide 720p (1680x720)": "Grande 720p (1680x720)",
"Auto (Recommended)": "Auto (Recommandé)",
"Low (Less Strict)": "Bas (moins strict)",
"Gen4 Turbo (Fast, High Quality)": "Turbo Gen4 (Rapide, Haute Qualité)",
"Gen3a Turbo (Balanced)": "Turbo Gen3a (Équilibre)",
"Veo3 (Google's Latest)": "Veo3 (Dernier Google)",
"First Frame": "Première image",
"Last Frame (gen3a_turbo only)": "Dernier cadre (gen3a_turbo uniquement)"
}

View File

@@ -0,0 +1,69 @@
{
"AI-powered content generation platform for creating high-quality images and videos using text prompts": "テキストプロンプトを使用して高品質の画像やビデオを作成するためのAIを搭載したコンテンツ生成プラットフォーム",
"Your Runway API key. Get it from your Runway account settings.": "Runway APIキー。Runwayのアカウント設定から取得できます。",
"Generate Image From Text": "テキストから画像を生成",
"Generate Video From Image": "画像からビデオを生成",
"Get Task Details": "タスクの詳細を取得する",
"Cancel or Delete Task": "タスクをキャンセルまたは削除",
"Generates an image using a text prompt via Runway's AI models": "ランウェイの AI モデルを使用してテキストプロンプトを使用して画像を生成します。",
"Generates a video based on image(s) and text prompt using Runway's AI models": "ランウェイの AI モデルを使用して、画像とテキストプロンプトに基づいてビデオを生成します。",
"Retrieve details of an existing Runway task by its ID": "IDで既存の滑走路タスクの詳細を取得します",
"Cancel or delete a task. Running/pending tasks are cancelled, completed tasks are deleted.": "タスクをキャンセルまたは削除します。実行中/保留中のタスクはキャンセルされ、完了したタスクは削除されます。",
"Model": "モデル",
"Prompt": "Prompt",
"Image Ratio": "画像比",
"Seed (Optional)": "シード(オプション)",
"Reference Images (Optional)": "参照イメージ(任意)",
"Public Figure Detection": "公共の図の検出",
"Prompt Image File": "画像ファイルのプロンプトを表示",
"Prompt Image URL": "Prompt Image URL",
"Image Position": "画像の位置",
"Prompt Text (Optional)": "プロンプトテキスト(オプション)",
"Video Resolution": "ビデオ解像度",
"Video Duration": "ビデオの持続時間",
"Content Moderation": "コンテンツモデレーション",
"Task ID": "Task ID",
"Download Output Files": "出力ファイルをダウンロード",
"AI model to use for image generation": "画像生成に使用する AI モデル",
"Describe what you want to see in the image (max 1000 characters)": "画像に表示したいものを記述してください(最大 1000 文字)",
"Resolution of the output image": "出力イメージの解像度",
"Random seed for reproducible results (0-4294967295)": "再現可能な結果のためのランダムシード0-4294967295",
"Up to 3 reference images (required for gen4_image_turbo)": "最大 3 枚の参照画像 (gen4_image_turboに必要)",
"How strict content moderation should be for recognizable public figures": "認識可能な公人に対して、コンテンツの管理がいかに厳格であるべきか",
"AI model to use for video generation": "動画生成に使用する AI モデル",
"Upload an image file to use as the video's starting frame": "動画の開始フレームとして使用する画像ファイルをアップロード",
"HTTPS URL of an image to use as the video's starting frame": "ビデオの開始フレームとして使用する画像の HTTPS URL",
"Position of the image in the video (last frame only supported by gen3a_turbo)": "動画内の画像の位置 (gen3a_turboでサポートされている最後のフレーム)",
"Describe what should happen in the video (max 1000 characters)": "ビデオで何が起こるかを説明してください(最大 1000 文字)",
"Available resolutions depend on the selected model": "利用可能な解像度は選択されたモデルに依存します",
"Available durations depend on the selected model": "選択されたモデルによって利用可能な期間が異なります",
"Content moderation settings (not available for veo3)": "コンテンツモデレーション設定veo3では使用できません",
"The unique ID of the task to retrieve (UUID format)": "取得するタスクの一意の ID (UUID フォーマット)",
"Download and return the generated files as attachments (if task succeeded)": "生成されたファイルを添付ファイルとしてダウンロードして返します(タスクが成功した場合)",
"The ID of the task to cancel or delete (UUID format)": "UUID フォーマットをキャンセルまたは削除するタスクの ID",
"Gen4 Image (High Quality)": "Gen4 Image (High Quality)",
"Gen4 Image Turbo (Fast)": "Gen4 Image Turbo (高速)",
"HD Landscape (1920x1080)": "HDランドスケープ1920x1080",
"HD Portrait (1080x1920)": "HDポートレート1080x1920",
"Square (1024x1024)": "正方形1024x1024",
"Wide (1360x768)": "幅 (1360x768)",
"Square HD (1080x1080)": "Square HD (1080x1080)",
"Standard Wide (1168x880)": "Standard Wide (1188x880)",
"Standard Landscape (1440x1080)": "標準的なランドスケープ(1440x1080)",
"Standard Portrait (1080x1440)": "標準ポートレート1080x1440",
"Ultra Wide (1808x768)": "Ultra Wide (1808x768)",
"Cinema Wide (2112x912)": "Cinema Wide (2112x912)",
"HD 720p (1280x720)": "HD 720p (1280x720)",
"HD 720p Portrait (720x1280)": "HD 720p Portrait (720x1280)",
"Square 720p (720x720)": "Square 720p (720x720)",
"Standard (960x720)": "標準 (960x720)",
"Standard Portrait (720x960)": "標準的な縦長 (720x960)",
"Wide 720p (1680x720)": "Wide 720p (1680x720)",
"Auto (Recommended)": "自動 (推奨)",
"Low (Less Strict)": "Low (Less Strict)",
"Gen4 Turbo (Fast, High Quality)": "Gen4 Turbo (高速、高品質)",
"Gen3a Turbo (Balanced)": "Gen3a Turbo (Balanced)",
"Veo3 (Google's Latest)": "Veo3 (Googleの最新)",
"First Frame": "最初のフレーム",
"Last Frame (gen3a_turbo only)": "最後のフレーム (gen3a_turboのみ)"
}

View File

@@ -0,0 +1,69 @@
{
"AI-powered content generation platform for creating high-quality images and videos using text prompts": "AI-powered content generatieplatform voor het maken van afbeeldingen en video's van hoge kwaliteit met tekstaanwijzingen",
"Your Runway API key. Get it from your Runway account settings.": "Jouw Runway API-sleutel. Haal het op van je Runway account instellingen.",
"Generate Image From Text": "Genereer afbeelding uit tekst",
"Generate Video From Image": "Genereer video van afbeelding",
"Get Task Details": "Verkrijg Taakgegevens",
"Cancel or Delete Task": "Taak annuleren of verwijderen",
"Generates an image using a text prompt via Runway's AI models": "Genereert een afbeelding met behulp van een tekstprompt via Runway's AI modellen",
"Generates a video based on image(s) and text prompt using Runway's AI models": "Genereert een video gebaseerd op afbeelding(en) en tekst prompt met behulp van Runway's AI modellen",
"Retrieve details of an existing Runway task by its ID": "Haal details op van een bestaande Runway taak via zijn ID",
"Cancel or delete a task. Running/pending tasks are cancelled, completed tasks are deleted.": "Annuleren of verwijderen van een taak. Lopenen/openstaande taken worden geannuleerd, voltooide taken worden verwijderd.",
"Model": "Model",
"Prompt": "Prompt",
"Image Ratio": "Afbeelding ratio",
"Seed (Optional)": "Seed (optioneel)",
"Reference Images (Optional)": "Referentie afbeeldingen (optioneel)",
"Public Figure Detection": "Openbare figuur detectie",
"Prompt Image File": "Vragen naar bestand",
"Prompt Image URL": "Prompt Image URL",
"Image Position": "Afbeelding positie",
"Prompt Text (Optional)": "Tekst vragen (optioneel)",
"Video Resolution": "Video resolutie",
"Video Duration": "Video Duur",
"Content Moderation": "Content Moderatie",
"Task ID": "Task ID",
"Download Output Files": "Download uitvoer bestanden",
"AI model to use for image generation": "AI model te gebruiken voor beeldgeneratie",
"Describe what you want to see in the image (max 1000 characters)": "Beschrijf wat u wilt zien op de afbeelding (max 1000 tekens)",
"Resolution of the output image": "Resolutie van de uitvoerafbeelding",
"Random seed for reproducible results (0-4294967295)": "Willekeurige seed voor reproduceerbare resultaten (0-4294967295)",
"Up to 3 reference images (required for gen4_image_turbo)": "Tot 3 referentie afbeeldingen (vereist voor gen4_image_turbo)",
"How strict content moderation should be for recognizable public figures": "Hoe streng inhoudelijke matiging moet zijn voor herkenbare prominenten",
"AI model to use for video generation": "AI model dat moet worden gebruikt voor video-generatie",
"Upload an image file to use as the video's starting frame": "Upload een afbeeldingsbestand om het video startframe te gebruiken",
"HTTPS URL of an image to use as the video's starting frame": "HTTPS URL van een te gebruiken afbeelding als het startscherm van de video's",
"Position of the image in the video (last frame only supported by gen3a_turbo)": "Positie van de afbeelding in de video (laatste frame alleen ondersteund door gen3a_turbo)",
"Describe what should happen in the video (max 1000 characters)": "Beschrijf wat er in de video moet gebeuren (max 1000 tekens)",
"Available resolutions depend on the selected model": "Beschikbare resoluties zijn afhankelijk van het geselecteerde model",
"Available durations depend on the selected model": "Beschikbare duur hangt af van het geselecteerde model",
"Content moderation settings (not available for veo3)": "Content moderatie-instellingen (niet beschikbaar voor veo3)",
"The unique ID of the task to retrieve (UUID format)": "De unieke ID van de op te halen taak (UUID formaat)",
"Download and return the generated files as attachments (if task succeeded)": "Download en geef de gegenereerde bestanden terug als bijlagen (als taak geslaagd)",
"The ID of the task to cancel or delete (UUID format)": "Het ID van de taak om te annuleren of te verwijderen (UUID formaat)",
"Gen4 Image (High Quality)": "Gen4 Afbeelding (Hoge kwaliteit)",
"Gen4 Image Turbo (Fast)": "Turbo Gen4 afbeelding (veilig)",
"HD Landscape (1920x1080)": "HD Liggend (1920x1080)",
"HD Portrait (1080x1920)": "HD Portret (1080x1920)",
"Square (1024x1024)": "Vierkant (1024x1024)",
"Wide (1360x768)": "Breed (1360x768)",
"Square HD (1080x1080)": "Square HD (1080x1080)",
"Standard Wide (1168x880)": "Standaard Breed (1168x880)",
"Standard Landscape (1440x1080)": "Standaard Liggend (1440x1080)",
"Standard Portrait (1080x1440)": "Standaard portret (1080x1440)",
"Ultra Wide (1808x768)": "Ultra breed (1808x768)",
"Cinema Wide (2112x912)": "Bioscoop Breed (2112x912)",
"HD 720p (1280x720)": "HD 720p (1280x720)",
"HD 720p Portrait (720x1280)": "HD 720p portret (720x1280)",
"Square 720p (720x720)": "Vierkant 720p (720x720)",
"Standard (960x720)": "Standaard (960x720)",
"Standard Portrait (720x960)": "Standaard portret (720x960)",
"Wide 720p (1680x720)": "Brede 720p (1680x720)",
"Auto (Recommended)": "Auto (Aanbevolen)",
"Low (Less Strict)": "Laag (minder trict)",
"Gen4 Turbo (Fast, High Quality)": "Gen4 Turbo (Vooruit, hoge kwaliteit)",
"Gen3a Turbo (Balanced)": "Gen3a Turbo (balans)",
"Veo3 (Google's Latest)": "Veo3 (laatste Google's )",
"First Frame": "Eerste frame",
"Last Frame (gen3a_turbo only)": "Laatste Frame (alleen gen3a_turbo)"
}

View File

@@ -0,0 +1,69 @@
{
"AI-powered content generation platform for creating high-quality images and videos using text prompts": "Plataforma de geração de conteúdo com tecnologia IA para criar imagens e vídeos de alta qualidade usando prompts de texto",
"Your Runway API key. Get it from your Runway account settings.": "Sua chave da API do Runway. Obtenha-a nas configurações da conta do Runway.",
"Generate Image From Text": "Gerar Imagem a partir do Texto",
"Generate Video From Image": "Gerar Vídeo a partir da Imagem",
"Get Task Details": "Obter Detalhes da Tarefa",
"Cancel or Delete Task": "Cancelar ou excluir tarefa",
"Generates an image using a text prompt via Runway's AI models": "Gera uma imagem usando um prompt de texto através de modelos AI de Runway",
"Generates a video based on image(s) and text prompt using Runway's AI models": "Gera um vídeo baseado na(s) imagem(s) e prompt de texto usando os modelos de IA de Runway",
"Retrieve details of an existing Runway task by its ID": "Recuperar detalhes de uma tarefa existente do runway por sua ID",
"Cancel or delete a task. Running/pending tasks are cancelled, completed tasks are deleted.": "Cancele ou exclua uma tarefa. As tarefas executadas/pendentes são canceladas, as tarefas concluídas serão excluídas.",
"Model": "Modelo",
"Prompt": "Aviso",
"Image Ratio": "Taxa da Imagem",
"Seed (Optional)": "Seed (opcional)",
"Reference Images (Optional)": "Imagens de Referência (Opcional)",
"Public Figure Detection": "Detecção de Figura Pública",
"Prompt Image File": "Prompt de Arquivo de Imagem",
"Prompt Image URL": "Prompt Image URL",
"Image Position": "Posição da Imagem",
"Prompt Text (Optional)": "Texto Adicional (Opcional)",
"Video Resolution": "Resolução do Vídeo",
"Video Duration": "Duração do Vídeo",
"Content Moderation": "Moderação de conteúdo",
"Task ID": "Task ID",
"Download Output Files": "Baixar arquivos de saída",
"AI model to use for image generation": "Modelo IA para usar para geração de imagem",
"Describe what you want to see in the image (max 1000 characters)": "Descreva o que você quer ver na imagem (máximo de 1000 caracteres)",
"Resolution of the output image": "Resolução da imagem de saída",
"Random seed for reproducible results (0-4294967295)": "Semente aleatória para resultados reproduzíveis (0-4294967295)",
"Up to 3 reference images (required for gen4_image_turbo)": "Até 3 imagens de referência (necessário para gen4_image_turbo)",
"How strict content moderation should be for recognizable public figures": "Quão rigorosa deve ser a moderação de conteúdo para figuras públicas reconhecíveis",
"AI model to use for video generation": "Modelo IA de uso para geração de vídeo",
"Upload an image file to use as the video's starting frame": "Envie um arquivo de imagem para usar como quadro inicial do vídeo",
"HTTPS URL of an image to use as the video's starting frame": "URL HTTPS de uma imagem para usar como quadro inicial do vídeo",
"Position of the image in the video (last frame only supported by gen3a_turbo)": "Posição da imagem no vídeo (última moldura suportada apenas por gen3a_turbo)",
"Describe what should happen in the video (max 1000 characters)": "Descreva o que deve acontecer no vídeo (máximo de 1000 caracteres)",
"Available resolutions depend on the selected model": "Resoluções disponíveis dependem do modelo selecionado",
"Available durations depend on the selected model": "As durações disponíveis dependem do modelo selecionado",
"Content moderation settings (not available for veo3)": "Configurações de moderação do conteúdo (não disponíveis para veo3)",
"The unique ID of the task to retrieve (UUID format)": "A ID única da tarefa a ser recuperada (formato UUID)",
"Download and return the generated files as attachments (if task succeeded)": "Baixe e retorne os arquivos gerados como anexos (se a tarefa for bem sucedida)",
"The ID of the task to cancel or delete (UUID format)": "A ID da tarefa para cancelar ou excluir (formato UUID)",
"Gen4 Image (High Quality)": "Imagem G4 (Alta Qualidade)",
"Gen4 Image Turbo (Fast)": "Imagem do G4 (Rápido)",
"HD Landscape (1920x1080)": "HD Paisagem (1920x1080)",
"HD Portrait (1080x1920)": "Retrato HD (1080x1920)",
"Square (1024x1024)": "Quadrado (1024x1024)",
"Wide (1360x768)": "Ampla (1360x768)",
"Square HD (1080x1080)": "HD Quadrado (1080x1080)",
"Standard Wide (1168x880)": "Largura padrão (1168x880)",
"Standard Landscape (1440x1080)": "Paisagem Padrão (1440x1080)",
"Standard Portrait (1080x1440)": "Retrato Padrão (1080x1440)",
"Ultra Wide (1808x768)": "Ultra larva (1808x768)",
"Cinema Wide (2112x912)": "Amplo Cinema (2112x912)",
"HD 720p (1280x720)": "HD 720p (1280x720)",
"HD 720p Portrait (720x1280)": "HD 720p Retrato (720x1280)",
"Square 720p (720x720)": "Quadrado 720p (720x720)",
"Standard (960x720)": "Padrão (960x720)",
"Standard Portrait (720x960)": "Retrato padrão (720x960)",
"Wide 720p (1680x720)": "Largura 720p (1680x720)",
"Auto (Recommended)": "Automático (recomendado)",
"Low (Less Strict)": "Baixa (Menor Estrita)",
"Gen4 Turbo (Fast, High Quality)": "Gênero 4 (Leste, Alta Qualidade)",
"Gen3a Turbo (Balanced)": "Gen3a Turbo (Balanceado)",
"Veo3 (Google's Latest)": "Veo3 (mais recente do Google)",
"First Frame": "Primeiro Quadro",
"Last Frame (gen3a_turbo only)": "Último Quadro (apenas gen3a_turbo)"
}

View File

@@ -0,0 +1,69 @@
{
"AI-powered content generation platform for creating high-quality images and videos using text prompts": "AI-powered content generation platform for creating high-quality images and videos using text prompts",
"Your Runway API key. Get it from your Runway account settings.": "Your Runway API key. Get it from your Runway account settings.",
"Generate Image From Text": "Generate Image From Text",
"Generate Video From Image": "Generate Video From Image",
"Get Task Details": "Get Task Details",
"Cancel or Delete Task": "Cancel or Delete Task",
"Generates an image using a text prompt via Runway's AI models": "Generates an image using a text prompt via Runway's AI models",
"Generates a video based on image(s) and text prompt using Runway's AI models": "Generates a video based on image(s) and text prompt using Runway's AI models",
"Retrieve details of an existing Runway task by its ID": "Retrieve details of an existing Runway task by its ID",
"Cancel or delete a task. Running/pending tasks are cancelled, completed tasks are deleted.": "Cancel or delete a task. Running/pending tasks are cancelled, completed tasks are deleted.",
"Model": "Model",
"Prompt": "Prompt",
"Image Ratio": "Image Ratio",
"Seed (Optional)": "Seed (Optional)",
"Reference Images (Optional)": "Reference Images (Optional)",
"Public Figure Detection": "Public Figure Detection",
"Prompt Image File": "Prompt Image File",
"Prompt Image URL": "Prompt Image URL",
"Image Position": "Image Position",
"Prompt Text (Optional)": "Prompt Text (Optional)",
"Video Resolution": "Video Resolution",
"Video Duration": "Video Duration",
"Content Moderation": "Content Moderation",
"Task ID": "Task ID",
"Download Output Files": "Download Output Files",
"AI model to use for image generation": "AI model to use for image generation",
"Describe what you want to see in the image (max 1000 characters)": "Describe what you want to see in the image (max 1000 characters)",
"Resolution of the output image": "Resolution of the output image",
"Random seed for reproducible results (0-4294967295)": "Random seed for reproducible results (0-4294967295)",
"Up to 3 reference images (required for gen4_image_turbo)": "Up to 3 reference images (required for gen4_image_turbo)",
"How strict content moderation should be for recognizable public figures": "How strict content moderation should be for recognizable public figures",
"AI model to use for video generation": "AI model to use for video generation",
"Upload an image file to use as the video's starting frame": "Upload an image file to use as the video's starting frame",
"HTTPS URL of an image to use as the video's starting frame": "HTTPS URL of an image to use as the video's starting frame",
"Position of the image in the video (last frame only supported by gen3a_turbo)": "Position of the image in the video (last frame only supported by gen3a_turbo)",
"Describe what should happen in the video (max 1000 characters)": "Describe what should happen in the video (max 1000 characters)",
"Available resolutions depend on the selected model": "Available resolutions depend on the selected model",
"Available durations depend on the selected model": "Available durations depend on the selected model",
"Content moderation settings (not available for veo3)": "Content moderation settings (not available for veo3)",
"The unique ID of the task to retrieve (UUID format)": "The unique ID of the task to retrieve (UUID format)",
"Download and return the generated files as attachments (if task succeeded)": "Download and return the generated files as attachments (if task succeeded)",
"The ID of the task to cancel or delete (UUID format)": "The ID of the task to cancel or delete (UUID format)",
"Gen4 Image (High Quality)": "Gen4 Image (High Quality)",
"Gen4 Image Turbo (Fast)": "Gen4 Image Turbo (Fast)",
"HD Landscape (1920x1080)": "HD Landscape (1920x1080)",
"HD Portrait (1080x1920)": "HD Portrait (1080x1920)",
"Square (1024x1024)": "Square (1024x1024)",
"Wide (1360x768)": "Wide (1360x768)",
"Square HD (1080x1080)": "Square HD (1080x1080)",
"Standard Wide (1168x880)": "Standard Wide (1168x880)",
"Standard Landscape (1440x1080)": "Standard Landscape (1440x1080)",
"Standard Portrait (1080x1440)": "Standard Portrait (1080x1440)",
"Ultra Wide (1808x768)": "Ultra Wide (1808x768)",
"Cinema Wide (2112x912)": "Cinema Wide (2112x912)",
"HD 720p (1280x720)": "HD 720p (1280x720)",
"HD 720p Portrait (720x1280)": "HD 720p Portrait (720x1280)",
"Square 720p (720x720)": "Square 720p (720x720)",
"Standard (960x720)": "Standard (960x720)",
"Standard Portrait (720x960)": "Standard Portrait (720x960)",
"Wide 720p (1680x720)": "Wide 720p (1680x720)",
"Auto (Recommended)": "Auto (Recommended)",
"Low (Less Strict)": "Low (Less Strict)",
"Gen4 Turbo (Fast, High Quality)": "Gen4 Turbo (Fast, High Quality)",
"Gen3a Turbo (Balanced)": "Gen3a Turbo (Balanced)",
"Veo3 (Google's Latest)": "Veo3 (Google's Latest)",
"First Frame": "First Frame",
"Last Frame (gen3a_turbo only)": "Last Frame (gen3a_turbo only)"
}

View File

@@ -0,0 +1,69 @@
{
"AI-powered content generation platform for creating high-quality images and videos using text prompts": "AI-powered content generation platform for creating high-quality images and videos using text prompts",
"Your Runway API key. Get it from your Runway account settings.": "Your Runway API key. Get it from your Runway account settings.",
"Generate Image From Text": "Generate Image From Text",
"Generate Video From Image": "Generate Video From Image",
"Get Task Details": "Get Task Details",
"Cancel or Delete Task": "Cancel or Delete Task",
"Generates an image using a text prompt via Runway's AI models": "Generates an image using a text prompt via Runway's AI models",
"Generates a video based on image(s) and text prompt using Runway's AI models": "Generates a video based on image(s) and text prompt using Runway's AI models",
"Retrieve details of an existing Runway task by its ID": "Retrieve details of an existing Runway task by its ID",
"Cancel or delete a task. Running/pending tasks are cancelled, completed tasks are deleted.": "Cancel or delete a task. Running/pending tasks are cancelled, completed tasks are deleted.",
"Model": "Model",
"Prompt": "Prompt",
"Image Ratio": "Image Ratio",
"Seed (Optional)": "Seed (Optional)",
"Reference Images (Optional)": "Reference Images (Optional)",
"Public Figure Detection": "Public Figure Detection",
"Prompt Image File": "Prompt Image File",
"Prompt Image URL": "Prompt Image URL",
"Image Position": "Image Position",
"Prompt Text (Optional)": "Prompt Text (Optional)",
"Video Resolution": "Video Resolution",
"Video Duration": "Video Duration",
"Content Moderation": "Content Moderation",
"Task ID": "Task ID",
"Download Output Files": "Download Output Files",
"AI model to use for image generation": "AI model to use for image generation",
"Describe what you want to see in the image (max 1000 characters)": "Describe what you want to see in the image (max 1000 characters)",
"Resolution of the output image": "Resolution of the output image",
"Random seed for reproducible results (0-4294967295)": "Random seed for reproducible results (0-4294967295)",
"Up to 3 reference images (required for gen4_image_turbo)": "Up to 3 reference images (required for gen4_image_turbo)",
"How strict content moderation should be for recognizable public figures": "How strict content moderation should be for recognizable public figures",
"AI model to use for video generation": "AI model to use for video generation",
"Upload an image file to use as the video's starting frame": "Upload an image file to use as the video's starting frame",
"HTTPS URL of an image to use as the video's starting frame": "HTTPS URL of an image to use as the video's starting frame",
"Position of the image in the video (last frame only supported by gen3a_turbo)": "Position of the image in the video (last frame only supported by gen3a_turbo)",
"Describe what should happen in the video (max 1000 characters)": "Describe what should happen in the video (max 1000 characters)",
"Available resolutions depend on the selected model": "Available resolutions depend on the selected model",
"Available durations depend on the selected model": "Available durations depend on the selected model",
"Content moderation settings (not available for veo3)": "Content moderation settings (not available for veo3)",
"The unique ID of the task to retrieve (UUID format)": "The unique ID of the task to retrieve (UUID format)",
"Download and return the generated files as attachments (if task succeeded)": "Download and return the generated files as attachments (if task succeeded)",
"The ID of the task to cancel or delete (UUID format)": "The ID of the task to cancel or delete (UUID format)",
"Gen4 Image (High Quality)": "Gen4 Image (High Quality)",
"Gen4 Image Turbo (Fast)": "Gen4 Image Turbo (Fast)",
"HD Landscape (1920x1080)": "HD Landscape (1920x1080)",
"HD Portrait (1080x1920)": "HD Portrait (1080x1920)",
"Square (1024x1024)": "Square (1024x1024)",
"Wide (1360x768)": "Wide (1360x768)",
"Square HD (1080x1080)": "Square HD (1080x1080)",
"Standard Wide (1168x880)": "Standard Wide (1168x880)",
"Standard Landscape (1440x1080)": "Standard Landscape (1440x1080)",
"Standard Portrait (1080x1440)": "Standard Portrait (1080x1440)",
"Ultra Wide (1808x768)": "Ultra Wide (1808x768)",
"Cinema Wide (2112x912)": "Cinema Wide (2112x912)",
"HD 720p (1280x720)": "HD 720p (1280x720)",
"HD 720p Portrait (720x1280)": "HD 720p Portrait (720x1280)",
"Square 720p (720x720)": "Square 720p (720x720)",
"Standard (960x720)": "Standard (960x720)",
"Standard Portrait (720x960)": "Standard Portrait (720x960)",
"Wide 720p (1680x720)": "Wide 720p (1680x720)",
"Auto (Recommended)": "Auto (Recommended)",
"Low (Less Strict)": "Low (Less Strict)",
"Gen4 Turbo (Fast, High Quality)": "Gen4 Turbo (Fast, High Quality)",
"Gen3a Turbo (Balanced)": "Gen3a Turbo (Balanced)",
"Veo3 (Google's Latest)": "Veo3 (Google's Latest)",
"First Frame": "First Frame",
"Last Frame (gen3a_turbo only)": "Last Frame (gen3a_turbo only)"
}

View File

@@ -0,0 +1,21 @@
import { createPiece } from "@activepieces/pieces-framework";
import { PieceCategory } from "@activepieces/shared";
import { runwayAuth } from "./lib/common/auth";
import { generateImageFromText } from "./lib/actions/generate-image-from-text";
import { generateVideoFromImage } from "./lib/actions/generate-video-from-image";
import { getTaskDetails } from "./lib/actions/get-task-details";
import { cancelOrDeleteTask } from "./lib/actions/cancel-or-delete-task";
export const runway = createPiece({
displayName: "Runway",
description: "AI-powered content generation platform for creating high-quality images and videos using text prompts",
auth: runwayAuth,
minimumSupportedRelease: '0.36.1',
logoUrl: "https://cdn.activepieces.com/pieces/runway.png",
categories: [PieceCategory.ARTIFICIAL_INTELLIGENCE],
authors: ["sparkybug"],
actions: [generateImageFromText, generateVideoFromImage, getTaskDetails, cancelOrDeleteTask],
triggers: [],
});

View File

@@ -0,0 +1,68 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { propsValidation } from '@activepieces/pieces-common';
import { runwayAuth } from '../common';
import RunwayML from '@runwayml/sdk';
import { z } from 'zod';
export const cancelOrDeleteTask = createAction({
auth: runwayAuth,
name: 'cancel_or_delete_task',
displayName: 'Cancel or Delete Task',
description: 'Cancel or delete a task. Running/pending tasks are cancelled, completed tasks are deleted.',
props: {
taskId: Property.ShortText({
displayName: 'Task ID',
description: 'The ID of the task to cancel or delete (UUID format)',
required: true
}),
},
async run({ auth, propsValue }) {
await propsValidation.validateZod(propsValue, {
taskId: z.string().uuid('Task ID must be a valid UUID format'),
});
const apiKey = auth.secret_text;
const client = new RunwayML({ apiKey });
// First get task details to determine what action will be taken
let task;
try {
task = await client.tasks.retrieve(propsValue.taskId);
} catch (error: any) {
if (error.status === 404) {
throw new Error(`Task not found: ${propsValue.taskId}. The task may have already been deleted.`);
}
throw new Error(`Failed to retrieve task: ${error.message || 'Unknown error'}`);
}
const wasRunning = ['RUNNING', 'PENDING', 'THROTTLED'].includes(task.status);
const action = wasRunning ? 'cancelled' : 'deleted';
try {
await client.tasks.delete(propsValue.taskId);
return {
success: true,
taskId: task.id,
action: action,
message: `Task ${action} successfully`,
previousStatus: task.status,
wasRunning: wasRunning
};
} catch (error: any) {
if (error.status === 404) {
return {
success: true,
taskId: propsValue.taskId,
action: 'already_deleted',
message: 'Task was already deleted',
previousStatus: 'UNKNOWN',
wasRunning: false
};
}
throw new Error(`Failed to ${action.slice(0, -1)} task: ${error.message || 'Unknown error'}`);
}
},
});

View File

@@ -0,0 +1,141 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { propsValidation } from '@activepieces/pieces-common';
import { runwayAuth } from '../common';
import RunwayML from '@runwayml/sdk';
import { z } from 'zod';
export const generateImageFromText = createAction({
auth: runwayAuth,
name: 'generate_image_from_text',
displayName: 'Generate Image From Text',
description: 'Generates an image using a text prompt via Runway\'s AI models',
props: {
model: Property.StaticDropdown({
displayName: 'Model',
description: 'AI model to use for image generation',
required: true,
options: {
options: [
{ label: 'Gen4 Image (High Quality)', value: 'gen4_image' },
{ label: 'Gen4 Image Turbo (Fast)', value: 'gen4_image_turbo' },
],
},
}),
promptText: Property.LongText({
displayName: 'Prompt',
description: 'Describe what you want to see in the image (max 1000 characters)',
required: true,
}),
ratio: Property.StaticDropdown({
displayName: 'Image Ratio',
description: 'Resolution of the output image',
required: true,
options: {
options: [
{ label: 'HD Landscape (1920x1080)', value: '1920:1080' },
{ label: 'HD Portrait (1080x1920)', value: '1080:1920' },
{ label: 'Square (1024x1024)', value: '1024:1024' },
{ label: 'Wide (1360x768)', value: '1360:768' },
{ label: 'Square HD (1080x1080)', value: '1080:1080' },
{ label: 'Standard Wide (1168x880)', value: '1168:880' },
{ label: 'Standard Landscape (1440x1080)', value: '1440:1080' },
{ label: 'Standard Portrait (1080x1440)', value: '1080:1440' },
{ label: 'Ultra Wide (1808x768)', value: '1808:768' },
{ label: 'Cinema Wide (2112x912)', value: '2112:912' },
{ label: 'HD 720p (1280x720)', value: '1280:720' },
{ label: 'HD 720p Portrait (720x1280)', value: '720:1280' },
{ label: 'Square 720p (720x720)', value: '720:720' },
{ label: 'Standard (960x720)', value: '960:720' },
{ label: 'Standard Portrait (720x960)', value: '720:960' },
{ label: 'Wide 720p (1680x720)', value: '1680:720' },
],
},
}),
seed: Property.Number({
displayName: 'Seed (Optional)',
description: 'Random seed for reproducible results (0-4294967295)',
required: false,
}),
referenceImages: Property.Array({
displayName: 'Reference Images (Optional)',
description: 'Up to 3 reference images (required for gen4_image_turbo)',
required: false,
properties: {
uri: Property.ShortText({
displayName: 'Image URL',
description: 'HTTPS URL or data URI of the reference image',
required: true
}),
tag: Property.ShortText({
displayName: 'Tag',
description: 'Name to reference this image in your prompt using @tag (3-16 characters, alphanumeric + underscore)',
required: false
}),
},
}),
publicFigureThreshold: Property.StaticDropdown({
displayName: 'Public Figure Detection',
description: 'How strict content moderation should be for recognizable public figures',
required: false,
defaultValue: 'auto',
options: {
options: [
{ label: 'Auto (Recommended)', value: 'auto' },
{ label: 'Low (Less Strict)', value: 'low' },
],
},
}),
},
async run({ auth, propsValue }) {
// Zod validation
await propsValidation.validateZod(propsValue, {
promptText: z.string().min(1, 'Prompt text cannot be empty').max(1000, 'Prompt text must be 1000 characters or fewer'),
seed: z.number().min(0, 'Seed must be at least 0').max(4294967295, 'Seed must be at most 4294967295').optional(),
referenceImages: z.array(z.object({
uri: z.string().url('Reference image URI must be a valid URL'),
tag: z.string().min(3, 'Tag must be at least 3 characters').max(16, 'Tag must be at most 16 characters').regex(/^[a-zA-Z][a-zA-Z0-9_]*$/, 'Tag must start with a letter and contain only letters, numbers, and underscores').optional()
})).max(3, 'Maximum of 3 reference images allowed').optional(),
});
// Special validation for gen4_image_turbo
if (propsValue.model === 'gen4_image_turbo' && (!propsValue.referenceImages || propsValue.referenceImages.length === 0)) {
throw new Error('gen4_image_turbo requires at least one reference image');
}
const apiKey = auth.secret_text;
const client = new RunwayML({ apiKey });
const requestBody: any = {
model: propsValue.model,
promptText: propsValue.promptText,
ratio: propsValue.ratio,
};
if (propsValue.seed !== undefined) {
requestBody.seed = propsValue.seed;
}
if (propsValue.referenceImages && propsValue.referenceImages.length > 0) {
requestBody.referenceImages = propsValue.referenceImages;
}
if (propsValue.publicFigureThreshold) {
requestBody.contentModeration = {
publicFigureThreshold: propsValue.publicFigureThreshold
};
}
try {
const task = await client.textToImage.create(requestBody);
return {
success: true,
taskId: task.id,
};
} catch (error: any) {
throw new Error(`Failed to generate image: ${error.message || 'Unknown error'}`);
}
},
});

View File

@@ -0,0 +1,306 @@
import { createAction, Property, DynamicPropsValue } from '@activepieces/pieces-framework';
import { propsValidation } from '@activepieces/pieces-common';
import { runwayAuth } from '../common';
import RunwayML from '@runwayml/sdk';
import { z } from 'zod';
export const generateVideoFromImage = createAction({
auth: runwayAuth,
name: 'generate_video_from_image',
displayName: 'Generate Video From Image',
description: 'Generates a video based on image(s) and text prompt using Runway\'s AI models',
props: {
model: Property.StaticDropdown({
displayName: 'Model',
description: 'AI model to use for video generation',
required: true,
options: {
options: [
{ label: 'Gen4 Turbo (Fast, High Quality)', value: 'gen4_turbo' },
{ label: 'Gen3a Turbo (Balanced)', value: 'gen3a_turbo' },
{ label: 'Veo3 (Google\'s Latest)', value: 'veo3' },
],
},
}),
promptImageFile: Property.File({
displayName: 'Prompt Image File',
description: 'Upload an image file to use as the video\'s starting frame',
required: false
}),
promptImageUrl: Property.ShortText({
displayName: 'Prompt Image URL',
description: 'HTTPS URL of an image to use as the video\'s starting frame',
required: false
}),
imagePosition: Property.StaticDropdown({
displayName: 'Image Position',
description: 'Position of the image in the video (last frame only supported by gen3a_turbo)',
required: false,
defaultValue: 'first',
options: {
options: [
{ label: 'First Frame', value: 'first' },
{ label: 'Last Frame (gen3a_turbo only)', value: 'last' },
],
},
}),
promptText: Property.LongText({
displayName: 'Prompt Text (Optional)',
description: 'Describe what should happen in the video (max 1000 characters)',
required: false
}),
ratio: Property.DynamicProperties({
auth: runwayAuth,
displayName: 'Video Resolution',
description: 'Available resolutions depend on the selected model',
required: true,
refreshers: ['model'],
props: async ({ model }) => {
const ratioOptions: DynamicPropsValue = {};
if ((model as unknown as string) === 'gen4_turbo') {
ratioOptions['ratio'] = Property.StaticDropdown({
displayName: 'Resolution',
required: true,
options: {
options: [
{ label: 'HD Landscape (1280x720)', value: '1280:720' },
{ label: 'HD Portrait (720x1280)', value: '720:1280' },
{ label: 'Wide (1104x832)', value: '1104:832' },
{ label: 'Tall (832x1104)', value: '832:1104' },
{ label: 'Square (960x960)', value: '960:960' },
{ label: 'Ultra Wide (1584x672)', value: '1584:672' },
],
},
});
} else if ((model as unknown as string) === 'gen3a_turbo') {
ratioOptions['ratio'] = Property.StaticDropdown({
displayName: 'Resolution',
required: true,
options: {
options: [
{ label: 'Landscape (1280x768)', value: '1280:768' },
{ label: 'Portrait (768x1280)', value: '768:1280' },
],
},
});
} else if ((model as unknown as string) === 'veo3') {
ratioOptions['ratio'] = Property.StaticDropdown({
displayName: 'Resolution',
required: true,
options: {
options: [
{ label: 'HD Landscape (1280x720)', value: '1280:720' },
{ label: 'HD Portrait (720x1280)', value: '720:1280' },
],
},
});
} else {
ratioOptions['ratio'] = Property.StaticDropdown({
displayName: 'Resolution',
required: true,
options: {
options: [
{ label: 'Select a model first', value: '' },
],
},
});
}
return ratioOptions;
},
}),
duration: Property.DynamicProperties({
auth: runwayAuth,
displayName: 'Video Duration',
description: 'Available durations depend on the selected model',
required: true,
refreshers: ['model'],
props: async ({ model }) => {
const durationOptions: DynamicPropsValue = {};
if ((model as unknown as string) === 'veo3') {
durationOptions['duration'] = Property.StaticDropdown({
displayName: 'Duration (seconds)',
required: true,
defaultValue: 8,
options: {
options: [
{ label: '8 seconds (required for veo3)', value: 8 },
],
},
});
} else if ((model as unknown as string) === 'gen4_turbo' || (model as unknown as string) === 'gen3a_turbo') {
durationOptions['duration'] = Property.StaticDropdown({
displayName: 'Duration (seconds)',
required: true,
options: {
options: [
{ label: '5 seconds', value: 5 },
{ label: '10 seconds', value: 10 },
],
},
});
} else {
durationOptions['duration'] = Property.StaticDropdown({
displayName: 'Duration (seconds)',
required: true,
options: {
options: [
{ label: 'Select a model first', value: '' },
],
},
});
}
return durationOptions;
},
}),
seed: Property.Number({
displayName: 'Seed (Optional)',
description: 'Random seed for reproducible results (0-4294967295)',
required: false
}),
contentModeration: Property.DynamicProperties({
auth: runwayAuth,
displayName: 'Content Moderation',
description: 'Content moderation settings (not available for veo3)',
required: false,
refreshers: ['model'],
props: async ({ model }) => {
const moderationOptions: DynamicPropsValue = {};
if ((model as unknown as string) === 'veo3') {
moderationOptions['info'] = Property.MarkDown({
value: '**Note:** Content moderation is not supported by the veo3 model.',
});
} else {
moderationOptions['publicFigureThreshold'] = Property.StaticDropdown({
displayName: 'Public Figure Detection',
description: 'How strict content moderation should be for recognizable public figures',
required: false,
defaultValue: 'auto',
options: {
options: [
{ label: 'Auto (Recommended)', value: 'auto' },
{ label: 'Low (Less Strict)', value: 'low' },
],
},
});
}
return moderationOptions;
},
}),
},
async run({ auth, propsValue, files }) {
// Zod validation
await propsValidation.validateZod(propsValue, {
promptText: z.string().max(1000, 'Prompt text must be 1000 characters or fewer').optional(),
seed: z.number().min(0, 'Seed must be at least 0').max(4294967295, 'Seed must be at most 4294967295').optional(),
promptImageUrl: z.string().url('Prompt image URL must be a valid HTTPS URL').optional(),
});
// Input validation
const hasFile = !!propsValue.promptImageFile;
const hasUrl = !!propsValue.promptImageUrl;
if ((hasFile && hasUrl) || (!hasFile && !hasUrl)) {
throw new Error('You must provide either a Prompt Image File or a Prompt Image URL, but not both.');
}
// Model-specific validations
const model = propsValue.model;
const duration = (propsValue.duration as any)?.['duration'] || propsValue.duration;
const ratio = (propsValue.ratio as any)?.['ratio'] || propsValue.ratio;
const imagePosition = propsValue.imagePosition || 'first';
// Validate duration per model
if (model === 'veo3' && duration !== 8) {
throw new Error('veo3 model requires a duration of exactly 8 seconds');
}
if ((model === 'gen4_turbo' || model === 'gen3a_turbo') && duration !== 5 && duration !== 10) {
throw new Error(`${model} model requires a duration of either 5 or 10 seconds`);
}
// Validate ratio per model
const validRatios = {
gen4_turbo: ['1280:720', '720:1280', '1104:832', '832:1104', '960:960', '1584:672'],
gen3a_turbo: ['1280:768', '768:1280'],
veo3: ['1280:720', '720:1280']
};
if (!validRatios[model as keyof typeof validRatios]?.includes(ratio)) {
throw new Error(`Invalid resolution ${ratio} for model ${model}`);
}
// Validate image position per model
if (imagePosition === 'last' && model !== 'gen3a_turbo') {
throw new Error('Last frame positioning is only supported by gen3a_turbo model');
}
// Prepare image URL
let imageUrl: string;
if (hasFile) {
const f = propsValue.promptImageFile as any;
const ext = f?.extension || 'jpeg';
imageUrl = `data:image/${ext};base64,${f?.base64}`;
} else {
imageUrl = propsValue.promptImageUrl as string;
}
const apiKey = auth.secret_text;
const client = new RunwayML({ apiKey });
// Build request body according to SDK specification
const requestBody: any = {
model: model,
ratio: ratio,
};
// Handle different image input formats based on position
if (imagePosition === 'first' || model !== 'gen3a_turbo') {
// Simple string format for first frame or non-gen3a_turbo models
requestBody.promptImage = imageUrl;
} else {
// Array format for last frame positioning (gen3a_turbo only)
requestBody.promptImage = [{
uri: imageUrl,
position: imagePosition
}];
}
// Add optional parameters
if (duration) {
requestBody.duration = duration;
}
if (propsValue.promptText) {
requestBody.promptText = propsValue.promptText;
}
if (propsValue.seed !== undefined) {
requestBody.seed = propsValue.seed;
}
// Add content moderation only for supported models
if (model !== 'veo3' && (propsValue.contentModeration as any)?.['publicFigureThreshold']) {
requestBody.contentModeration = {
publicFigureThreshold: (propsValue.contentModeration as any)['publicFigureThreshold']
};
}
try {
const task = await client.imageToVideo.create(requestBody);
return {
success: true,
taskId: task.id,
};
} catch (error: any) {
throw new Error(`Failed to generate video: ${error.message || 'Unknown error'}`);
}
},
});

View File

@@ -0,0 +1,166 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { AuthenticationType, httpClient, HttpMethod, propsValidation } from '@activepieces/pieces-common';
import { runwayAuth } from '../common';
import RunwayML from '@runwayml/sdk';
import { z } from 'zod';
// Helper function to get file extension from URL or Content-Type
const getFileExtensionFromUrl = (url: string, contentType?: string): string => {
// Try to get extension from URL first
const urlExt = url.split('.').pop()?.split('?')[0]?.toLowerCase();
if (urlExt && ['mp4', 'mov', 'avi', 'gif', 'webm', 'jpg', 'jpeg', 'png', 'webp'].includes(urlExt)) {
return urlExt;
}
// Fallback to content type
if (contentType) {
if (contentType.includes('video/mp4')) return 'mp4';
if (contentType.includes('video/quicktime')) return 'mov';
if (contentType.includes('video/webm')) return 'webm';
if (contentType.includes('image/gif')) return 'gif';
if (contentType.includes('image/jpeg')) return 'jpg';
if (contentType.includes('image/png')) return 'png';
if (contentType.includes('image/webp')) return 'webp';
}
// Default fallback
return 'mp4';
};
const getStatusDescription = (status: string): string => {
switch (status) {
case 'PENDING': return 'Task is queued and waiting to start';
case 'THROTTLED': return 'Task is waiting for other jobs to complete';
case 'RUNNING': return 'Task is currently being processed';
case 'SUCCEEDED': return 'Task completed successfully';
case 'FAILED': return 'Task failed to complete';
case 'CANCELLED': return 'Task was cancelled or aborted';
default: return 'Unknown status';
}
};
export const getTaskDetails = createAction({
auth: runwayAuth,
name: 'get_task_details',
displayName: 'Get Task Details',
description: 'Retrieve details of an existing Runway task by its ID',
props: {
taskId: Property.ShortText({
displayName: 'Task ID',
description: 'The unique ID of the task to retrieve (UUID format)',
required: true
}),
downloadOutput: Property.Checkbox({
displayName: 'Download Output Files',
description: 'Download and return the generated files as attachments (if task succeeded)',
required: false,
defaultValue: false
}),
},
async run({ auth, propsValue, files }) {
// Zod validation
await propsValidation.validateZod(propsValue, {
taskId: z.string().uuid('Task ID must be a valid UUID format'),
});
const apiKey = auth.secret_text;
const client = new RunwayML({ apiKey });
let task;
try {
task = await client.tasks.retrieve(propsValue.taskId);
} catch (error: any) {
if (error.status === 404) {
throw new Error(`Task not found: ${propsValue.taskId}. Please verify the task ID is correct.`);
}
throw new Error(`Failed to retrieve task: ${error.message || 'Unknown error'}`);
}
const outputs = task.output || [];
const artifacts: Array<any> = [];
// Download output files if requested and available
if (propsValue.downloadOutput && outputs.length > 0) {
if (task.status !== 'SUCCEEDED') {
console.warn(`Task status is ${task.status}, but download was requested. Only succeeded tasks have downloadable outputs.`);
} else {
for (const [index, url] of outputs.entries()) {
try {
// First, make a HEAD request to get content type
const headResponse = await httpClient.sendRequest({
method: HttpMethod.HEAD,
url,
authentication: { type: AuthenticationType.BEARER_TOKEN, token: apiKey },
timeout: 30000,
});
const contentType = headResponse.headers?.['content-type'] as string;
const extension = getFileExtensionFromUrl(url, contentType);
// Now download the actual file
const response = await httpClient.sendRequest<ArrayBuffer>({
method: HttpMethod.GET,
url,
responseType: 'arraybuffer',
authentication: { type: AuthenticationType.BEARER_TOKEN, token: apiKey },
timeout: 300000, // 5 minutes for large video files
});
const file = await files.write({
fileName: `runway-output-${task.id}-${index + 1}.${extension}`,
data: Buffer.from(response.body as any),
});
artifacts.push({
fileName: `runway-output-${task.id}-${index + 1}.${extension}`,
fileUrl: file,
contentType: contentType,
originalUrl: url,
index: index + 1
});
} catch (downloadError: any) {
console.error(`Failed to download output ${index + 1}:`, downloadError.message);
// Continue with other files even if one fails
}
}
}
}
// Calculate completion percentage for display
let completionPercentage = 0;
if (task.status === 'SUCCEEDED') {
completionPercentage = 100;
} else if (task.status === 'RUNNING' && typeof task.progress === 'number') {
completionPercentage = Math.round(task.progress * 100);
}
return {
success: true,
taskId: task.id,
status: task.status,
statusDescription: getStatusDescription(task.status),
createdAt: task.createdAt,
completionPercentage,
progress: task.progress,
outputUrls: outputs,
downloadedFiles: artifacts,
hasOutputs: outputs.length > 0,
isComplete: task.status === 'SUCCEEDED',
isFailed: task.status === 'FAILED',
isRunning: task.status === 'RUNNING',
failureCode: task.failureCode,
failureMessage: task.failure,
// Summary for easy consumption
summary: {
id: task.id,
status: task.status,
created: task.createdAt,
progress: completionPercentage,
outputCount: outputs.length,
downloadedCount: artifacts.length
}
};
},
});

View File

@@ -0,0 +1,9 @@
import { PieceAuth } from '@activepieces/pieces-framework';
export const runwayAuth = PieceAuth.SecretText({
displayName: 'API Key',
description: 'Your Runway API key. Get it from your Runway account settings.',
required: true,
});

View File

@@ -0,0 +1,12 @@
export * from './auth';
import { Property } from '@activepieces/pieces-framework';
export const runwayModelProperty = Property.ShortText({ displayName: 'Model', required: true });
export const runwayTaskIdProperty = Property.ShortText({
displayName: 'Task ID',
description: 'The UUID of the task to retrieve (copy from the task creation response)',
required: true
});