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:
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"extends": [
|
||||
"../../../../.eslintrc.base.json"
|
||||
],
|
||||
"ignorePatterns": [
|
||||
"!**/*"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx",
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
# pieces-heygen
|
||||
|
||||
This library was generated with [Nx](https://nx.dev).
|
||||
|
||||
## Building
|
||||
|
||||
Run `nx build pieces-heygen` to build the library.
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "@activepieces/piece-heygen",
|
||||
"version": "0.0.7"
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"name": "pieces-heygen",
|
||||
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "packages/pieces/community/heygen/src",
|
||||
"projectType": "library",
|
||||
"release": {
|
||||
"version": {
|
||||
"currentVersionResolver": "git-tag",
|
||||
"preserveLocalDependencyProtocols": false,
|
||||
"manifestRootsToUpdate": [
|
||||
"dist/{projectRoot}"
|
||||
]
|
||||
}
|
||||
},
|
||||
"tags": [],
|
||||
"targets": {
|
||||
"build": {
|
||||
"executor": "@nx/js:tsc",
|
||||
"outputs": [
|
||||
"{options.outputPath}"
|
||||
],
|
||||
"options": {
|
||||
"outputPath": "dist/packages/pieces/community/heygen",
|
||||
"tsConfig": "packages/pieces/community/heygen/tsconfig.lib.json",
|
||||
"packageJson": "packages/pieces/community/heygen/package.json",
|
||||
"main": "packages/pieces/community/heygen/src/index.ts",
|
||||
"assets": [
|
||||
"packages/pieces/community/heygen/*.md",
|
||||
{
|
||||
"input": "packages/pieces/community/heygen/src/i18n",
|
||||
"output": "./src/i18n",
|
||||
"glob": "**/!(i18n.json)"
|
||||
}
|
||||
],
|
||||
"buildableProjectDepsInPackageJsonType": "dependencies",
|
||||
"updateBuildableProjectDepsInPackageJson": true
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build",
|
||||
"prebuild"
|
||||
]
|
||||
},
|
||||
"nx-release-publish": {
|
||||
"options": {
|
||||
"packageRoot": "dist/{projectRoot}"
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"executor": "@nx/eslint:lint",
|
||||
"outputs": [
|
||||
"{options.outputFile}"
|
||||
]
|
||||
},
|
||||
"prebuild": {
|
||||
"executor": "nx:run-commands",
|
||||
"options": {
|
||||
"cwd": "packages/pieces/community/heygen",
|
||||
"command": "bun install --no-save --silent"
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"Generate and manage AI avatar videos using HeyGen.": "Generieren und verwalten Sie AI Avatar Videos mit HeyGen.",
|
||||
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "Sie können Ihren API-Schlüssel erhalten, indem Sie in Ihren Space Einstellungen in der HeyGen App navigieren.",
|
||||
"Create Video from Template": "Video aus Vorlage erstellen",
|
||||
"Retrieve Translated Video Status": "Übersetzter Video-Status abrufen",
|
||||
"Retrieve Video Status": "Videostatus abrufen",
|
||||
"Retrieve Sharable Video URL": "URL des freigegebenen Videos abrufen",
|
||||
"Upload an Asset": "Asset hochladen",
|
||||
"Translate Video": "Video übersetzen",
|
||||
"Custom API Call": "Eigener API-Aufruf",
|
||||
"Create a video using a selected template.": "Erstellen Sie ein Video mit einer ausgewählten Vorlage.",
|
||||
"Retrieves the status of a translated video.": "Ruft den Status eines übersetzten Videos ab.",
|
||||
"Retrieve the status and details of a video using its ID.": "Rufen Sie den Status und die Details eines Videos unter Verwendung seiner ID ab.",
|
||||
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Erzeugt eine öffentliche URL für ein Video, so dass es geteilt und öffentlich zugänglich gemacht werden kann.",
|
||||
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Mediendateien (Bilder, Videos oder Audio) in HeyGen hochladen. Unterstützt JPEG, PNG, MP4, WEBM und MPEG-Dateien.",
|
||||
"Translate a video into 175+ languages with natural voice and lip-sync.": "Übersetzen Sie ein Video in 175+ Sprachen mit natürlicher Stimme und Lippensynchron.",
|
||||
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
|
||||
"Template": "Vorlage",
|
||||
"Video Title": "Videotitel",
|
||||
"Enable Captions": "Bildunterschriften aktivieren",
|
||||
"Include GIF Preview": "GIF-Vorschau einbeziehen",
|
||||
"Enable Public Sharing": "Öffentliches Teilen aktivieren",
|
||||
"Folder": "Ordner",
|
||||
"Brand Voice": "Marke Stimme",
|
||||
"Callback URL": "Callback URL",
|
||||
"Video Width": "Video-Breite",
|
||||
"Video Height": "Videohöhe",
|
||||
"Template Varriables": "Verfügbare Vorlagen",
|
||||
"Video ID": "Video ID",
|
||||
"File": "Datei",
|
||||
"Video URL": "Video-URL",
|
||||
"Title": "Titel",
|
||||
"Supported Language": "Unterstützte Sprache",
|
||||
"Translate Audio Only": "Nur Audio übersetzen",
|
||||
"Number of Speakers": "Anzahl der Lautsprecher",
|
||||
"Callback ID": "Callback ID",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopfzeilen",
|
||||
"Query Parameters": "Abfrageparameter",
|
||||
"Body": "Körper",
|
||||
"Response is Binary ?": "Antwort ist binär?",
|
||||
"No Error on Failure": "Kein Fehler bei Fehler",
|
||||
"Timeout (in seconds)": "Timeout (in Sekunden)",
|
||||
"Select the template to generate the video.": "Wählen Sie die Vorlage aus, um das Video zu generieren.",
|
||||
"Title of the generated video.": "Titel des generierten Videos.",
|
||||
"Select the folder to store the video.": "Wählen Sie den Ordner zum Speichern des Videos.",
|
||||
"Select the Brand Voice to apply to the video.": "Wählen Sie die Marke Voice zum Anwenden auf das Video.",
|
||||
"Webhook URL to notify when video rendering is complete.": "Webhook URL, die angezeigt wird, wenn die Video-Darstellung abgeschlossen ist.",
|
||||
"The ID of the translated video to check the status for.": "Die ID des übersetzten Videos um den Status zu überprüfen.",
|
||||
"The ID of the video to retrieve the status for.": "Die ID des Videos, für das der Status abgerufen wird.",
|
||||
"The ID of the video to generate a shareable URL for.": "Die ID des Videos, um eine teilbare URL zu generieren.",
|
||||
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "Die hochzuladende Datei (JPEG, PNG, MP4, WEBM oder MPEG).",
|
||||
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL der zu übersetzenden Videodatei. Unterstützt direkte URLs, Google Drive und YouTube.",
|
||||
"Optional title of the translated video.": "Optionaler Titel des übersetzten Videos.",
|
||||
"Select the language for video translation.": "Wählen Sie die Sprache für die Videoübersetzung.",
|
||||
"Only translate the audio without modifying faces.": "Nur den Ton übersetzen, ohne Gesichter zu verändern.",
|
||||
"Number of speakers in the video (if applicable).": "Anzahl der Lautsprecher im Video (falls zutreffend).",
|
||||
"Custom ID returned in webhook callback.": "Benutzerdefinierte ID im Webhook Callback zurückgegeben.",
|
||||
"URL to notify when translation is complete.": "URL zur Benachrichtigung, wenn die Übersetzung abgeschlossen ist.",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
|
||||
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
|
||||
"GET": "ERHALTEN",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "LÖSCHEN",
|
||||
"HEAD": "HEAD",
|
||||
"New Avatar Video Event (Success)": "Neues Avatar-Video-Ereignis (Erfolg)",
|
||||
"New Avatar Video Event (Fail)": "Neues Avatar-Video-Ereignis (Fail)",
|
||||
"Triggers when a video is generated successfully.": "Wird ausgelöst, wenn ein Video erfolgreich generiert wurde.",
|
||||
"Triggers when a video generation process fails.": "Wird ausgelöst, wenn ein Videogenerierungsprozess fehlschlägt."
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"Generate and manage AI avatar videos using HeyGen.": "Generar y administrar vídeos de avatar de IA usando HeyGen.",
|
||||
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "Puede obtener su clave de API navegando a la configuración espacial en la aplicación HeyGen.",
|
||||
"Create Video from Template": "Crear vídeo desde plantilla",
|
||||
"Retrieve Translated Video Status": "Recuperar estado de vídeo traducido",
|
||||
"Retrieve Video Status": "Recuperar estado del vídeo",
|
||||
"Retrieve Sharable Video URL": "Recuperar URL de vídeo compartible",
|
||||
"Upload an Asset": "Subir un Activo",
|
||||
"Translate Video": "Traducir vídeo",
|
||||
"Custom API Call": "Llamada API personalizada",
|
||||
"Create a video using a selected template.": "Crear un vídeo con una plantilla seleccionada.",
|
||||
"Retrieves the status of a translated video.": "Recuperar el estado de un vídeo traducido.",
|
||||
"Retrieve the status and details of a video using its ID.": "Recuperar el estado y los detalles de un video usando su ID.",
|
||||
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Genera una URL pública para un vídeo, permitiéndole compartir y acceder públicamente.",
|
||||
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Subir archivos multimedia (imágenes, vídeos o audio) a HeyGen. Soporta archivos JPEG, PNG, MP4, WEBM y MPEG.",
|
||||
"Translate a video into 175+ languages with natural voice and lip-sync.": "Traducir un video a más de 175 idiomas con voz natural y lip-sync.",
|
||||
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
|
||||
"Template": "Plantilla",
|
||||
"Video Title": "Título del vídeo",
|
||||
"Enable Captions": "Activar leyendas",
|
||||
"Include GIF Preview": "Incluye vista previa GIF",
|
||||
"Enable Public Sharing": "Activar Compartir Público",
|
||||
"Folder": "Carpeta",
|
||||
"Brand Voice": "Voz de marca",
|
||||
"Callback URL": "Callback URL",
|
||||
"Video Width": "Ancho de vídeo",
|
||||
"Video Height": "Altura de vídeo",
|
||||
"Template Varriables": "Plantillas Varriables",
|
||||
"Video ID": "ID de vídeo",
|
||||
"File": "Archivo",
|
||||
"Video URL": "URL del vídeo",
|
||||
"Title": "Título",
|
||||
"Supported Language": "Idioma soportado",
|
||||
"Translate Audio Only": "Traducir solo audio",
|
||||
"Number of Speakers": "Número de altavoces",
|
||||
"Callback ID": "Callback ID",
|
||||
"Method": "Método",
|
||||
"Headers": "Encabezados",
|
||||
"Query Parameters": "Parámetros de consulta",
|
||||
"Body": "Cuerpo",
|
||||
"Response is Binary ?": "¿Respuesta es binaria?",
|
||||
"No Error on Failure": "No hay ningún error en fallo",
|
||||
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
|
||||
"Select the template to generate the video.": "Seleccione la plantilla para generar el vídeo.",
|
||||
"Title of the generated video.": "Título del vídeo generado.",
|
||||
"Select the folder to store the video.": "Seleccione la carpeta para guardar el vídeo.",
|
||||
"Select the Brand Voice to apply to the video.": "Seleccione la voz de la marca para aplicar al vídeo.",
|
||||
"Webhook URL to notify when video rendering is complete.": "URL de Webhook para notificar cuando el renderizado de vídeo se haya completado.",
|
||||
"The ID of the translated video to check the status for.": "El ID del vídeo traducido para comprobar el estado.",
|
||||
"The ID of the video to retrieve the status for.": "El ID del vídeo para recuperar el estado para.",
|
||||
"The ID of the video to generate a shareable URL for.": "El ID del vídeo para generar una URL compartible.",
|
||||
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "El archivo a subir (JPEG, PNG, MP4, WEBM o MPEG).",
|
||||
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL del archivo de vídeo a traducir. Soporta URLs directas, Google Drive y YouTube.",
|
||||
"Optional title of the translated video.": "Título opcional del vídeo traducido.",
|
||||
"Select the language for video translation.": "Seleccione el idioma para la traducción de vídeo.",
|
||||
"Only translate the audio without modifying faces.": "Sólo traducir el audio sin modificar las caras.",
|
||||
"Number of speakers in the video (if applicable).": "Número de altavoces en el vídeo (si corresponde).",
|
||||
"Custom ID returned in webhook callback.": "ID personalizado devuelto en llamada webhook.",
|
||||
"URL to notify when translation is complete.": "URL para notificar cuando la traducción esté completa.",
|
||||
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
|
||||
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
|
||||
"GET": "RECOGER",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "BORRAR",
|
||||
"HEAD": "LIMPIO",
|
||||
"New Avatar Video Event (Success)": "Nuevo evento de video avatar (éxito)",
|
||||
"New Avatar Video Event (Fail)": "Nuevo evento de video de avatar (falla)",
|
||||
"Triggers when a video is generated successfully.": "Dispara cuando un video se genera correctamente.",
|
||||
"Triggers when a video generation process fails.": "Se activa cuando un proceso de generación de vídeo falla."
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"Generate and manage AI avatar videos using HeyGen.": "Générer et gérer les vidéos des avatars AI à l'aide de HeyGen.",
|
||||
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "Vous pouvez obtenir votre clé API en accédant à vos paramètres d'espace dans l'application HeyGen.",
|
||||
"Create Video from Template": "Créer une vidéo à partir du modèle",
|
||||
"Retrieve Translated Video Status": "Récupérer l'état de la vidéo traduite",
|
||||
"Retrieve Video Status": "Récupérer l'état de la vidéo",
|
||||
"Retrieve Sharable Video URL": "Récupérer l'URL de la vidéo partageable",
|
||||
"Upload an Asset": "Télécharger un actif",
|
||||
"Translate Video": "Traduire la vidéo",
|
||||
"Custom API Call": "Appel API personnalisé",
|
||||
"Create a video using a selected template.": "Créer une vidéo en utilisant un modèle sélectionné.",
|
||||
"Retrieves the status of a translated video.": "Récupère le statut d'une vidéo traduite.",
|
||||
"Retrieve the status and details of a video using its ID.": "Récupérez le statut et les détails d'une vidéo en utilisant son ID.",
|
||||
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Génère une URL publique pour une vidéo, permettant de la partager et d'y accéder publiquement.",
|
||||
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Télécharger des fichiers média (images, vidéos ou audio) vers HeyGen. Supporte des fichiers JPEG, PNG, MP4, WEBM, et MPEG.",
|
||||
"Translate a video into 175+ languages with natural voice and lip-sync.": "Traduisez une vidéo en plus de 175 langues avec voix naturelle et synchronisation des lèvres.",
|
||||
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un point de terminaison spécifique",
|
||||
"Template": "Gabarit",
|
||||
"Video Title": "Titre de la vidéo",
|
||||
"Enable Captions": "Activer les légendes",
|
||||
"Include GIF Preview": "Inclure l'aperçu du GIF",
|
||||
"Enable Public Sharing": "Activer le partage public",
|
||||
"Folder": "Dossier",
|
||||
"Brand Voice": "Voix de la marque",
|
||||
"Callback URL": "Callback URL",
|
||||
"Video Width": "Largeur de la vidéo",
|
||||
"Video Height": "Hauteur de la vidéo",
|
||||
"Template Varriables": "Modèles Varriables",
|
||||
"Video ID": "ID Vidéo",
|
||||
"File": "Ficher",
|
||||
"Video URL": "URL de la vidéo",
|
||||
"Title": "Titre de la page",
|
||||
"Supported Language": "Langue prise en charge",
|
||||
"Translate Audio Only": "Traduire seulement l'audio",
|
||||
"Number of Speakers": "Nombre d'orateurs",
|
||||
"Callback ID": "Callback ID",
|
||||
"Method": "Méthode",
|
||||
"Headers": "En-têtes",
|
||||
"Query Parameters": "Paramètres de requête",
|
||||
"Body": "Corps",
|
||||
"Response is Binary ?": "La réponse est Binaire ?",
|
||||
"No Error on Failure": "Aucune erreur en cas d'échec",
|
||||
"Timeout (in seconds)": "Délai d'attente (en secondes)",
|
||||
"Select the template to generate the video.": "Sélectionnez le modèle pour générer la vidéo.",
|
||||
"Title of the generated video.": "Titre de la vidéo générée.",
|
||||
"Select the folder to store the video.": "Sélectionnez le dossier pour stocker la vidéo.",
|
||||
"Select the Brand Voice to apply to the video.": "Sélectionnez la Voix de Marque à appliquer à la vidéo.",
|
||||
"Webhook URL to notify when video rendering is complete.": "URL du Webhook pour avertir lorsque le rendu de la vidéo est terminé.",
|
||||
"The ID of the translated video to check the status for.": "L'ID de la vidéo traduite pour vérifier le statut.",
|
||||
"The ID of the video to retrieve the status for.": "L'ID de la vidéo pour laquelle récupérer le statut.",
|
||||
"The ID of the video to generate a shareable URL for.": "L'ID de la vidéo pour générer une URL partageable.",
|
||||
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "Le fichier à télécharger (JPEG, PNG, MP4, WEBM, ou MPEG).",
|
||||
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL du fichier vidéo à traduire. Supporte les URL directes, Google Drive et YouTube.",
|
||||
"Optional title of the translated video.": "Titre optionnel de la vidéo traduite.",
|
||||
"Select the language for video translation.": "Sélectionnez la langue pour la traduction vidéo.",
|
||||
"Only translate the audio without modifying faces.": "Traduire seulement l'audio sans modifier les visages.",
|
||||
"Number of speakers in the video (if applicable).": "Nombre d'orateurs dans la vidéo (le cas échéant).",
|
||||
"Custom ID returned in webhook callback.": "ID personnalisé retourné dans la fonction de rappel du webhook.",
|
||||
"URL to notify when translation is complete.": "URL à signaler lorsque la traduction est terminée.",
|
||||
"Authorization headers are injected automatically from your connection.": "Les en-têtes d'autorisation sont injectés automatiquement à partir de votre connexion.",
|
||||
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
|
||||
"GET": "OBTENIR",
|
||||
"POST": "POSTER",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "EFFACER",
|
||||
"DELETE": "SUPPRIMER",
|
||||
"HEAD": "TÊTE",
|
||||
"New Avatar Video Event (Success)": "Nouvel Evénement Vidéo Avatar (Success)",
|
||||
"New Avatar Video Event (Fail)": "Nouvel Evénement de Vidéo d'Avatar (Échec de l'Evènement)",
|
||||
"Triggers when a video is generated successfully.": "Déclenche quand une vidéo est générée avec succès.",
|
||||
"Triggers when a video generation process fails.": "Déclenche lorsqu'un processus de génération de vidéo échoue."
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"Generate and manage AI avatar videos using HeyGen.": "HeyGenを使用してAIアバターのビデオを生成・管理します。",
|
||||
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "HeyGen Appのスペース設定に移動すると、APIキーを取得できます。",
|
||||
"Create Video from Template": "テンプレートからビデオを作成",
|
||||
"Retrieve Translated Video Status": "翻訳済み動画のステータスを取得する",
|
||||
"Retrieve Video Status": "ビデオステータスの取得",
|
||||
"Retrieve Sharable Video URL": "共有ビデオの URL を取得",
|
||||
"Upload an Asset": "アセットをアップロード",
|
||||
"Translate Video": "ビデオを翻訳",
|
||||
"Custom API Call": "カスタムAPI通話",
|
||||
"Create a video using a selected template.": "選択したテンプレートを使用してビデオを作成します。",
|
||||
"Retrieves the status of a translated video.": "翻訳された動画の状態を取得します。",
|
||||
"Retrieve the status and details of a video using its ID.": "ID を使用してビデオのステータスと詳細を取得します。",
|
||||
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "ビデオの公開 URL を生成し、公開してアクセスすることができます。",
|
||||
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "HeyGenにメディアファイル(画像、ビデオ、またはオーディオ)をアップロード。JPEG、PNG、MP4、WEBM、およびMPEGファイルをサポートしています。",
|
||||
"Translate a video into 175+ languages with natural voice and lip-sync.": "175以上の言語で自然な声と唇同期でビデオを翻訳します。",
|
||||
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
|
||||
"Template": "テンプレート",
|
||||
"Video Title": "ビデオタイトル",
|
||||
"Enable Captions": "キャプションを有効にする",
|
||||
"Include GIF Preview": "GIF のプレビューを含める",
|
||||
"Enable Public Sharing": "公開共有を有効にする",
|
||||
"Folder": "Folder",
|
||||
"Brand Voice": "ブランドの声",
|
||||
"Callback URL": "Callback URL",
|
||||
"Video Width": "動画の幅",
|
||||
"Video Height": "動画の高さ",
|
||||
"Template Varriables": "テンプレートvarriables",
|
||||
"Video ID": "ビデオ ID",
|
||||
"File": "ファイル",
|
||||
"Video URL": "動画の URL",
|
||||
"Title": "タイトル",
|
||||
"Supported Language": "対応言語",
|
||||
"Translate Audio Only": "音声のみ翻訳",
|
||||
"Number of Speakers": "スピーカーの数",
|
||||
"Callback ID": "Callback ID",
|
||||
"Method": "方法",
|
||||
"Headers": "ヘッダー",
|
||||
"Query Parameters": "クエリパラメータ",
|
||||
"Body": "本文",
|
||||
"Response is Binary ?": "応答はバイナリですか?",
|
||||
"No Error on Failure": "失敗時にエラーはありません",
|
||||
"Timeout (in seconds)": "タイムアウト(秒)",
|
||||
"Select the template to generate the video.": "動画を生成するテンプレートを選択します。",
|
||||
"Title of the generated video.": "生成されたビデオのタイトル",
|
||||
"Select the folder to store the video.": "ビデオを保存するフォルダを選択します。",
|
||||
"Select the Brand Voice to apply to the video.": "動画に適用するブランド音声を選択します。",
|
||||
"Webhook URL to notify when video rendering is complete.": "ビデオレンダリングが完了したら通知する Webhook URL。",
|
||||
"The ID of the translated video to check the status for.": "ステータスを確認するための翻訳されたビデオのID。",
|
||||
"The ID of the video to retrieve the status for.": "ステータスを取得するビデオのID。",
|
||||
"The ID of the video to generate a shareable URL for.": "共有可能なURLを生成するビデオのID。",
|
||||
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "アップロードするファイル(JPEG、PNG、MP4、WEBM、MPEG)です。",
|
||||
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "翻訳するビデオファイルのURL。直接URL、Googleドライブ、YouTubeに対応しています。",
|
||||
"Optional title of the translated video.": "翻訳されたビデオの任意のタイトル。",
|
||||
"Select the language for video translation.": "ビデオ翻訳の言語を選択します。",
|
||||
"Only translate the audio without modifying faces.": "顔を変更せずにオーディオを翻訳するだけです。",
|
||||
"Number of speakers in the video (if applicable).": "ビデオ内のスピーカー数(該当する場合)。",
|
||||
"Custom ID returned in webhook callback.": "WebhookコールバックでカスタムIDを返しました。",
|
||||
"URL to notify when translation is complete.": "翻訳が完了したら通知する URL",
|
||||
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
|
||||
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
|
||||
"GET": "取得",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "削除",
|
||||
"HEAD": "頭",
|
||||
"New Avatar Video Event (Success)": "新しいアバターのビデオイベント(成功)",
|
||||
"New Avatar Video Event (Fail)": "新しいアバタービデオイベント(失敗)",
|
||||
"Triggers when a video is generated successfully.": "ビデオが正常に生成されたときにトリガーします。",
|
||||
"Triggers when a video generation process fails.": "ビデオ生成プロセスが失敗したときにトリガーします。"
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"Generate and manage AI avatar videos using HeyGen.": "Genereer en beheer de AI avatar video's met behulp van HeyGen.",
|
||||
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "Je kunt je API-sleutel verkrijgen door naar je Ruimte Instellingen te navigeren in de HeyGen App.",
|
||||
"Create Video from Template": "Video maken van sjabloon",
|
||||
"Retrieve Translated Video Status": "Videostatus ophalen",
|
||||
"Retrieve Video Status": "Videostatus ophalen",
|
||||
"Retrieve Sharable Video URL": "Haal gedeelde video-URL op",
|
||||
"Upload an Asset": "Een asset uploaden",
|
||||
"Translate Video": "Video vertalen",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Create a video using a selected template.": "Maak een video aan met behulp van een geselecteerd sjabloon.",
|
||||
"Retrieves the status of a translated video.": "Herstelt de status van een vertaalde video.",
|
||||
"Retrieve the status and details of a video using its ID.": "Ophalen van de status en details van een video met behulp van de ID.",
|
||||
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Genereert een openbare URL voor een video, zodat deze openbaar kan worden gedeeld en benaderd.",
|
||||
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Mediabestanden (afbeeldingen, video's of audio) uploaden naar HeyGen. Ondersteunt JPEG, PNG, MP4, WEBM en MPEG bestanden.",
|
||||
"Translate a video into 175+ languages with natural voice and lip-sync.": "Vertaal een video in 175 + talen met natuurlijke stem en lip-synchronisatie.",
|
||||
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
|
||||
"Template": "Sjabloon",
|
||||
"Video Title": "Video titel",
|
||||
"Enable Captions": "Ondertiteling inschakelen",
|
||||
"Include GIF Preview": "GIF Preview meenemen",
|
||||
"Enable Public Sharing": "Openbare delen inschakelen",
|
||||
"Folder": "Map",
|
||||
"Brand Voice": "Merk Stem",
|
||||
"Callback URL": "Callback URL",
|
||||
"Video Width": "Video breedte",
|
||||
"Video Height": "Video hoogte",
|
||||
"Template Varriables": "Sjabloon Varriables",
|
||||
"Video ID": "Video ID",
|
||||
"File": "Bestand",
|
||||
"Video URL": "Video URL",
|
||||
"Title": "Aanspreektitel",
|
||||
"Supported Language": "Ondersteunde taal",
|
||||
"Translate Audio Only": "Alleen audio vertalen",
|
||||
"Number of Speakers": "Aantal sprekers",
|
||||
"Callback ID": "Callback ID",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopteksten",
|
||||
"Query Parameters": "Query parameters",
|
||||
"Body": "Lichaam",
|
||||
"Response is Binary ?": "Antwoord is binair?",
|
||||
"No Error on Failure": "Geen fout bij fout",
|
||||
"Timeout (in seconds)": "Time-out (in seconden)",
|
||||
"Select the template to generate the video.": "Selecteer de template om de video te genereren.",
|
||||
"Title of the generated video.": "Titel van de gegenereerde video.",
|
||||
"Select the folder to store the video.": "Selecteer de map om de video op te slaan.",
|
||||
"Select the Brand Voice to apply to the video.": "Selecteer het merk spraak om toe te passen op de video.",
|
||||
"Webhook URL to notify when video rendering is complete.": "Webhook URL om te informeren wanneer de video-weergave is voltooid.",
|
||||
"The ID of the translated video to check the status for.": "De ID van de vertaalde video om de status te controleren.",
|
||||
"The ID of the video to retrieve the status for.": "Het ID van de video om de status voor op te halen.",
|
||||
"The ID of the video to generate a shareable URL for.": "Het ID van de video om een deelbare URL voor te genereren.",
|
||||
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "Het te uploaden bestand (JPEG, PNG, MP4, WEBM of MPEG).",
|
||||
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL van het te vertalen videobestand. Ondersteunt directe URL's, Google Drive en YouTube.",
|
||||
"Optional title of the translated video.": "Optionele titel van de vertaalde video.",
|
||||
"Select the language for video translation.": "Selecteer de taal voor video-vertaling.",
|
||||
"Only translate the audio without modifying faces.": "Vertaal de audio alleen zonder gezichten te wijzigen.",
|
||||
"Number of speakers in the video (if applicable).": "Aantal sprekers in de video (indien van toepassing).",
|
||||
"Custom ID returned in webhook callback.": "Aangepaste ID geretourneerd in de webhook callback.",
|
||||
"URL to notify when translation is complete.": "URL om te informeren wanneer de vertaling is voltooid.",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
|
||||
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
|
||||
"GET": "KRIJG",
|
||||
"POST": "POSTE",
|
||||
"PATCH": "BEKIJK",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "VERWIJDEREN",
|
||||
"HEAD": "HOOFD",
|
||||
"New Avatar Video Event (Success)": "Nieuw Avatar Video Evenement (Succes)",
|
||||
"New Avatar Video Event (Fail)": "Nieuw Avatar Video Evenement (Vrij)",
|
||||
"Triggers when a video is generated successfully.": "Triggert wanneer een video met succes wordt gegenereerd.",
|
||||
"Triggers when a video generation process fails.": "Triggert wanneer een proces voor het genereren van video's mislukt."
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"Generate and manage AI avatar videos using HeyGen.": "Gere e gerencie vídeos de avatar IA usando a HeyGen.",
|
||||
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "Você pode obter a sua chave de API navegando nas Configurações do Espaço no aplicativo HeyGen.",
|
||||
"Create Video from Template": "Criar vídeo a partir do modelo",
|
||||
"Retrieve Translated Video Status": "Recuperar Status do Vídeo Traduzido",
|
||||
"Retrieve Video Status": "Recuperar Status do Vídeo",
|
||||
"Retrieve Sharable Video URL": "Recuperar URL de Vídeo Compartilhável",
|
||||
"Upload an Asset": "Carregar um Ativo",
|
||||
"Translate Video": "Traduzir vídeo",
|
||||
"Custom API Call": "Chamada de API personalizada",
|
||||
"Create a video using a selected template.": "Criar um vídeo usando um modelo selecionado.",
|
||||
"Retrieves the status of a translated video.": "Recupera o status de um vídeo traduzido.",
|
||||
"Retrieve the status and details of a video using its ID.": "Recuperar o status e detalhes de um vídeo usando sua ID.",
|
||||
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Gera uma URL pública para um vídeo, permitindo que seja compartilhado e acessado publicamente.",
|
||||
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Carregar arquivos de mídia (imagens, vídeos ou áudio) para HeyGen. Suporta arquivos JPEG, PNG, MP4, WEBM e MPEG.",
|
||||
"Translate a video into 175+ languages with natural voice and lip-sync.": "Traduza um vídeo para mais de 175 idiomas com voz natural e sincronização de lábios.",
|
||||
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
|
||||
"Template": "Modelo",
|
||||
"Video Title": "Título do Vídeo",
|
||||
"Enable Captions": "Habilitar legendas",
|
||||
"Include GIF Preview": "Incluir Prévia do GIF",
|
||||
"Enable Public Sharing": "Habilitar compartilhamento público",
|
||||
"Folder": "Pasta",
|
||||
"Brand Voice": "Voz da Marca",
|
||||
"Callback URL": "Callback URL",
|
||||
"Video Width": "Largura do Vídeo",
|
||||
"Video Height": "Altura do Vídeo",
|
||||
"Template Varriables": "Varriáveis do Modelo",
|
||||
"Video ID": "ID do Vídeo",
|
||||
"File": "Arquivo",
|
||||
"Video URL": "URL do vídeo",
|
||||
"Title": "Título",
|
||||
"Supported Language": "Idioma suportado",
|
||||
"Translate Audio Only": "Traduzir somente o áudio",
|
||||
"Number of Speakers": "Número de Pregadores",
|
||||
"Callback ID": "Callback ID",
|
||||
"Method": "Método",
|
||||
"Headers": "Cabeçalhos",
|
||||
"Query Parameters": "Parâmetros da consulta",
|
||||
"Body": "Conteúdo",
|
||||
"Response is Binary ?": "A resposta é binária ?",
|
||||
"No Error on Failure": "Nenhum erro no Failure",
|
||||
"Timeout (in seconds)": "Tempo limite (em segundos)",
|
||||
"Select the template to generate the video.": "Selecione o modelo para gerar o vídeo.",
|
||||
"Title of the generated video.": "Título do vídeo gerado.",
|
||||
"Select the folder to store the video.": "Selecione a pasta para armazenar o vídeo.",
|
||||
"Select the Brand Voice to apply to the video.": "Selecione a Voz da Marca para aplicar ao vídeo.",
|
||||
"Webhook URL to notify when video rendering is complete.": "Webhook URL para notificar quando a renderização de vídeo estiver concluída.",
|
||||
"The ID of the translated video to check the status for.": "A identificação do vídeo traduzido para verificar o status.",
|
||||
"The ID of the video to retrieve the status for.": "A identificação do vídeo para recuperar o status.",
|
||||
"The ID of the video to generate a shareable URL for.": "O ID do vídeo para gerar uma URL compartilhável.",
|
||||
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "O arquivo para upload (JPEG, PNG, MP4, WEBM ou MPEG).",
|
||||
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL do arquivo de vídeo a ser traduzido. Suporta URLs diretas, Google Drive e YouTube.",
|
||||
"Optional title of the translated video.": "Título opcional do vídeo traduzido.",
|
||||
"Select the language for video translation.": "Selecione o idioma para tradução do vídeo.",
|
||||
"Only translate the audio without modifying faces.": "Traduza apenas o áudio sem modificar os rostos.",
|
||||
"Number of speakers in the video (if applicable).": "Número de alto-falantes no vídeo (se aplicável).",
|
||||
"Custom ID returned in webhook callback.": "ID personalizado retornado no webhook callback.",
|
||||
"URL to notify when translation is complete.": "URL para notificar quando a tradução estiver completa.",
|
||||
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
|
||||
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
|
||||
"GET": "OBTER",
|
||||
"POST": "POSTAR",
|
||||
"PATCH": "COMPRAR",
|
||||
"PUT": "COLOCAR",
|
||||
"DELETE": "EXCLUIR",
|
||||
"HEAD": "CABEÇA",
|
||||
"New Avatar Video Event (Success)": "Novo evento de vídeo de avatar (Fotos)",
|
||||
"New Avatar Video Event (Fail)": "Novo evento de vídeo de avatar (falha)",
|
||||
"Triggers when a video is generated successfully.": "Dispara quando um vídeo é gerado com sucesso.",
|
||||
"Triggers when a video generation process fails.": "Aciona quando um processo de geração de vídeo falha."
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"HeyGen": "HeyGen",
|
||||
"Generate and manage AI avatar videos using HeyGen.": "Генерировать и управлять AI аватарами с помощью HeyGen.",
|
||||
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "Вы можете получить ключ API, перейдя в Настройки Пространства в приложении HeyGen.",
|
||||
"Create Video from Template": "Создать видео из шаблона",
|
||||
"Retrieve Translated Video Status": "Получить статус переведенного видео",
|
||||
"Retrieve Video Status": "Получить статус видео",
|
||||
"Retrieve Sharable Video URL": "Получить URL-адрес четкого видео",
|
||||
"Upload an Asset": "Загрузить актив",
|
||||
"Translate Video": "Перевести видео",
|
||||
"Custom API Call": "Пользовательский вызов API",
|
||||
"Create a video using a selected template.": "Создать видео с использованием выбранного шаблона.",
|
||||
"Retrieves the status of a translated video.": "Получает статус переведенного видео.",
|
||||
"Retrieve the status and details of a video using its ID.": "Получить статус и детали видео, используя его ID.",
|
||||
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Генерирует публичный URL-адрес для видео, позволяющий ему быть общедоступным.",
|
||||
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "HeyGen поддерживает файлы JPEG, PNG, MP4, WEBM и MPEG.",
|
||||
"Translate a video into 175+ languages with natural voice and lip-sync.": "Переведите видео на 175 + языков с естественным голосом и гуп-синтаксисом.",
|
||||
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
|
||||
"Template": "Шаблон",
|
||||
"Video Title": "Название видео",
|
||||
"Enable Captions": "Включить субтитры",
|
||||
"Include GIF Preview": "Включить превью GIF",
|
||||
"Enable Public Sharing": "Включить общий доступ",
|
||||
"Folder": "Папка",
|
||||
"Brand Voice": "Голос бренда",
|
||||
"Callback URL": "Callback URL",
|
||||
"Video Width": "Ширина видео",
|
||||
"Video Height": "Высота видео",
|
||||
"Template Varriables": "Привязанные к шаблону",
|
||||
"Video ID": "ID видео",
|
||||
"File": "Файл",
|
||||
"Video URL": "URL видео",
|
||||
"Title": "Заголовок",
|
||||
"Supported Language": "Поддерживаемый язык",
|
||||
"Translate Audio Only": "Перевести только аудио",
|
||||
"Number of Speakers": "Количество спикеров",
|
||||
"Callback ID": "Callback ID",
|
||||
"Method": "Метод",
|
||||
"Headers": "Заголовки",
|
||||
"Query Parameters": "Параметры запроса",
|
||||
"Body": "Тело",
|
||||
"No Error on Failure": "Нет ошибок при ошибке",
|
||||
"Timeout (in seconds)": "Таймаут (в секундах)",
|
||||
"Select the template to generate the video.": "Выберите шаблон для создания видео.",
|
||||
"Title of the generated video.": "Заголовок сгенерированного видео.",
|
||||
"Select the folder to store the video.": "Выберите папку для хранения видео.",
|
||||
"Select the Brand Voice to apply to the video.": "Выберите Brand Voice для применения к видео.",
|
||||
"Webhook URL to notify when video rendering is complete.": "Webhook URL для уведомления когда видео рендеринг завершен.",
|
||||
"The ID of the translated video to check the status for.": "ID переведенного видео для проверки статуса.",
|
||||
"The ID of the video to retrieve the status for.": "ID видео для получения статуса.",
|
||||
"The ID of the video to generate a shareable URL for.": "Идентификатор видео для создания разделяемого URL-адреса.",
|
||||
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "Файл для загрузки (JPEG, PNG, MP4, WEBM или MPEG).",
|
||||
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL видеофайла для перевода. Поддерживает прямые URL, Google Drive и YouTube.",
|
||||
"Optional title of the translated video.": "Необязательное название переведенного видео.",
|
||||
"Select the language for video translation.": "Выберите язык для перевода видео.",
|
||||
"Only translate the audio without modifying faces.": "Только переводить звук без изменения лица.",
|
||||
"Number of speakers in the video (if applicable).": "Число ораторов в видео (если это применимо).",
|
||||
"Custom ID returned in webhook callback.": "Пользовательский ID возвращается в обратном вызове webhook.",
|
||||
"URL to notify when translation is complete.": "URL-адрес для оповещения о завершении перевода.",
|
||||
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
|
||||
"GET": "ПОЛУЧИТЬ",
|
||||
"POST": "ПОСТ",
|
||||
"PATCH": "ПАТЧ",
|
||||
"PUT": "ПОКУПИТЬ",
|
||||
"DELETE": "УДАЛИТЬ",
|
||||
"HEAD": "HEAD",
|
||||
"New Avatar Video Event (Success)": "Новое Видео событие Аватара (успех)",
|
||||
"New Avatar Video Event (Fail)": "Новое событие для аватара (левый)",
|
||||
"Triggers when a video is generated successfully.": "Триггеры, когда видео сгенерировано успешно.",
|
||||
"Triggers when a video generation process fails.": "Срабатывает при сбое процесса генерации видео."
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"Generate and manage AI avatar videos using HeyGen.": "Generate and manage AI avatar videos using HeyGen.",
|
||||
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "You can obtain your API key by navigating to your Space Settings in HeyGen App.",
|
||||
"Create Video from Template": "Create Video from Template",
|
||||
"Retrieve Translated Video Status": "Retrieve Translated Video Status",
|
||||
"Retrieve Video Status": "Retrieve Video Status",
|
||||
"Retrieve Sharable Video URL": "Retrieve Sharable Video URL",
|
||||
"Upload an Asset": "Upload an Asset",
|
||||
"Translate Video": "Translate Video",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Create a video using a selected template.": "Create a video using a selected template.",
|
||||
"Retrieves the status of a translated video.": "Retrieves the status of a translated video.",
|
||||
"Retrieve the status and details of a video using its ID.": "Retrieve the status and details of a video using its ID.",
|
||||
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Generates a public URL for a video, allowing it to be shared and accessed publicly.",
|
||||
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.",
|
||||
"Translate a video into 175+ languages with natural voice and lip-sync.": "Translate a video into 175+ languages with natural voice and lip-sync.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Template": "Template",
|
||||
"Video Title": "Video Title",
|
||||
"Enable Captions": "Enable Captions",
|
||||
"Include GIF Preview": "Include GIF Preview",
|
||||
"Enable Public Sharing": "Enable Public Sharing",
|
||||
"Folder": "Folder",
|
||||
"Brand Voice": "Brand Voice",
|
||||
"Callback URL": "Callback URL",
|
||||
"Video Width": "Video Width",
|
||||
"Video Height": "Video Height",
|
||||
"Template Varriables": "Template Varriables",
|
||||
"Video ID": "Video ID",
|
||||
"File": "File",
|
||||
"Video URL": "Video URL",
|
||||
"Title": "Title",
|
||||
"Supported Language": "Supported Language",
|
||||
"Translate Audio Only": "Translate Audio Only",
|
||||
"Number of Speakers": "Number of Speakers",
|
||||
"Callback ID": "Callback ID",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"Select the template to generate the video.": "Select the template to generate the video.",
|
||||
"Title of the generated video.": "Title of the generated video.",
|
||||
"Select the folder to store the video.": "Select the folder to store the video.",
|
||||
"Select the Brand Voice to apply to the video.": "Select the Brand Voice to apply to the video.",
|
||||
"Webhook URL to notify when video rendering is complete.": "Webhook URL to notify when video rendering is complete.",
|
||||
"The ID of the translated video to check the status for.": "The ID of the translated video to check the status for.",
|
||||
"The ID of the video to retrieve the status for.": "The ID of the video to retrieve the status for.",
|
||||
"The ID of the video to generate a shareable URL for.": "The ID of the video to generate a shareable URL for.",
|
||||
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).",
|
||||
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.",
|
||||
"Optional title of the translated video.": "Optional title of the translated video.",
|
||||
"Select the language for video translation.": "Select the language for video translation.",
|
||||
"Only translate the audio without modifying faces.": "Only translate the audio without modifying faces.",
|
||||
"Number of speakers in the video (if applicable).": "Number of speakers in the video (if applicable).",
|
||||
"Custom ID returned in webhook callback.": "Custom ID returned in webhook callback.",
|
||||
"URL to notify when translation is complete.": "URL to notify when translation is complete.",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Avatar Video Event (Success)": "New Avatar Video Event (Success)",
|
||||
"New Avatar Video Event (Fail)": "New Avatar Video Event (Fail)",
|
||||
"Triggers when a video is generated successfully.": "Triggers when a video is generated successfully.",
|
||||
"Triggers when a video generation process fails.": "Triggers when a video generation process fails."
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"HeyGen": "HeyGen",
|
||||
"Generate and manage AI avatar videos using HeyGen.": "Generate and manage AI avatar videos using HeyGen.",
|
||||
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "You can obtain your API key by navigating to your Space Settings in HeyGen App.",
|
||||
"Create Video from Template": "Create Video from Template",
|
||||
"Retrieve Translated Video Status": "Retrieve Translated Video Status",
|
||||
"Retrieve Video Status": "Retrieve Video Status",
|
||||
"Retrieve Sharable Video URL": "Retrieve Sharable Video URL",
|
||||
"Upload an Asset": "Upload an Asset",
|
||||
"Translate Video": "Translate Video",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Create a video using a selected template.": "Create a video using a selected template.",
|
||||
"Retrieves the status of a translated video.": "Retrieves the status of a translated video.",
|
||||
"Retrieve the status and details of a video using its ID.": "Retrieve the status and details of a video using its ID.",
|
||||
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Generates a public URL for a video, allowing it to be shared and accessed publicly.",
|
||||
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.",
|
||||
"Translate a video into 175+ languages with natural voice and lip-sync.": "Translate a video into 175+ languages with natural voice and lip-sync.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Template": "Template",
|
||||
"Video Title": "Video Title",
|
||||
"Enable Captions": "Enable Captions",
|
||||
"Include GIF Preview": "Include GIF Preview",
|
||||
"Enable Public Sharing": "Enable Public Sharing",
|
||||
"Folder": "Folder",
|
||||
"Brand Voice": "Brand Voice",
|
||||
"Callback URL": "Callback URL",
|
||||
"Video Width": "Video Width",
|
||||
"Video Height": "Video Height",
|
||||
"Template Varriables": "Template Varriables",
|
||||
"Video ID": "Video ID",
|
||||
"File": "File",
|
||||
"Video URL": "Video URL",
|
||||
"Title": "Title",
|
||||
"Supported Language": "Supported Language",
|
||||
"Translate Audio Only": "Translate Audio Only",
|
||||
"Number of Speakers": "Number of Speakers",
|
||||
"Callback ID": "Callback ID",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"Select the template to generate the video.": "Select the template to generate the video.",
|
||||
"Title of the generated video.": "Title of the generated video.",
|
||||
"Select the folder to store the video.": "Select the folder to store the video.",
|
||||
"Select the Brand Voice to apply to the video.": "Select the Brand Voice to apply to the video.",
|
||||
"Webhook URL to notify when video rendering is complete.": "Webhook URL to notify when video rendering is complete.",
|
||||
"The ID of the translated video to check the status for.": "The ID of the translated video to check the status for.",
|
||||
"The ID of the video to retrieve the status for.": "The ID of the video to retrieve the status for.",
|
||||
"The ID of the video to generate a shareable URL for.": "The ID of the video to generate a shareable URL for.",
|
||||
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).",
|
||||
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.",
|
||||
"Optional title of the translated video.": "Optional title of the translated video.",
|
||||
"Select the language for video translation.": "Select the language for video translation.",
|
||||
"Only translate the audio without modifying faces.": "Only translate the audio without modifying faces.",
|
||||
"Number of speakers in the video (if applicable).": "Number of speakers in the video (if applicable).",
|
||||
"Custom ID returned in webhook callback.": "Custom ID returned in webhook callback.",
|
||||
"URL to notify when translation is complete.": "URL to notify when translation is complete.",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Avatar Video Event (Success)": "New Avatar Video Event (Success)",
|
||||
"New Avatar Video Event (Fail)": "New Avatar Video Event (Fail)",
|
||||
"Triggers when a video is generated successfully.": "Triggers when a video is generated successfully.",
|
||||
"Triggers when a video generation process fails.": "Triggers when a video generation process fails."
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"Generate and manage AI avatar videos using HeyGen.": "Generate and manage AI avatar videos using HeyGen.",
|
||||
"You can obtain your API key by navigating to your Space Settings in HeyGen App.": "You can obtain your API key by navigating to your Space Settings in HeyGen App.",
|
||||
"Create Video from Template": "Create Video from Template",
|
||||
"Retrieve Translated Video Status": "Retrieve Translated Video Status",
|
||||
"Retrieve Video Status": "Retrieve Video Status",
|
||||
"Retrieve Sharable Video URL": "Retrieve Sharable Video URL",
|
||||
"Upload an Asset": "Upload an Asset",
|
||||
"Translate Video": "Translate Video",
|
||||
"Custom API Call": "自定义 API 呼叫",
|
||||
"Create a video using a selected template.": "Create a video using a selected template.",
|
||||
"Retrieves the status of a translated video.": "Retrieves the status of a translated video.",
|
||||
"Retrieve the status and details of a video using its ID.": "Retrieve the status and details of a video using its ID.",
|
||||
"Generates a public URL for a video, allowing it to be shared and accessed publicly.": "Generates a public URL for a video, allowing it to be shared and accessed publicly.",
|
||||
"Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.": "Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.",
|
||||
"Translate a video into 175+ languages with natural voice and lip-sync.": "Translate a video into 175+ languages with natural voice and lip-sync.",
|
||||
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
|
||||
"Template": "模板",
|
||||
"Video Title": "Video Title",
|
||||
"Enable Captions": "Enable Captions",
|
||||
"Include GIF Preview": "Include GIF Preview",
|
||||
"Enable Public Sharing": "Enable Public Sharing",
|
||||
"Folder": "Folder",
|
||||
"Brand Voice": "Brand Voice",
|
||||
"Callback URL": "Callback URL",
|
||||
"Video Width": "Video Width",
|
||||
"Video Height": "Video Height",
|
||||
"Template Varriables": "Template Varriables",
|
||||
"Video ID": "Video ID",
|
||||
"File": "文件",
|
||||
"Video URL": "Video URL",
|
||||
"Title": "标题",
|
||||
"Supported Language": "Supported Language",
|
||||
"Translate Audio Only": "Translate Audio Only",
|
||||
"Number of Speakers": "Number of Speakers",
|
||||
"Callback ID": "Callback ID",
|
||||
"Method": "方法",
|
||||
"Headers": "信头",
|
||||
"Query Parameters": "查询参数",
|
||||
"Body": "正文内容",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "失败时没有错误",
|
||||
"Timeout (in seconds)": "超时(秒)",
|
||||
"Select the template to generate the video.": "Select the template to generate the video.",
|
||||
"Title of the generated video.": "Title of the generated video.",
|
||||
"Select the folder to store the video.": "Select the folder to store the video.",
|
||||
"Select the Brand Voice to apply to the video.": "Select the Brand Voice to apply to the video.",
|
||||
"Webhook URL to notify when video rendering is complete.": "Webhook URL to notify when video rendering is complete.",
|
||||
"The ID of the translated video to check the status for.": "The ID of the translated video to check the status for.",
|
||||
"The ID of the video to retrieve the status for.": "The ID of the video to retrieve the status for.",
|
||||
"The ID of the video to generate a shareable URL for.": "The ID of the video to generate a shareable URL for.",
|
||||
"The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).": "The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).",
|
||||
"URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.": "URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.",
|
||||
"Optional title of the translated video.": "Optional title of the translated video.",
|
||||
"Select the language for video translation.": "Select the language for video translation.",
|
||||
"Only translate the audio without modifying faces.": "Only translate the audio without modifying faces.",
|
||||
"Number of speakers in the video (if applicable).": "Number of speakers in the video (if applicable).",
|
||||
"Custom ID returned in webhook callback.": "Custom ID returned in webhook callback.",
|
||||
"URL to notify when translation is complete.": "URL to notify when translation is complete.",
|
||||
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"GET": "获取",
|
||||
"POST": "帖子",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "弹出",
|
||||
"DELETE": "删除",
|
||||
"HEAD": "黑色",
|
||||
"New Avatar Video Event (Success)": "New Avatar Video Event (Success)",
|
||||
"New Avatar Video Event (Fail)": "New Avatar Video Event (Fail)",
|
||||
"Triggers when a video is generated successfully.": "Triggers when a video is generated successfully.",
|
||||
"Triggers when a video generation process fails.": "Triggers when a video generation process fails."
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
import { createCustomApiCallAction } from '@activepieces/pieces-common';
|
||||
import { createPiece } from '@activepieces/pieces-framework';
|
||||
import { PieceCategory } from '@activepieces/shared';
|
||||
import { createVideoFromTemplateAction } from './lib/actions/create-a-video-from-template';
|
||||
import { retrieveTranslatedVideoStatus } from './lib/actions/retrieve-a-translated-video-status';
|
||||
import { retrieveVideoStatusAction } from './lib/actions/retrieve-a-video-status';
|
||||
import { retrieveSharableVideoUrlAction } from './lib/actions/retrieve-shareable-link-for-a-video';
|
||||
import { uploadAssetAction } from './lib/actions/upload-an-asset';
|
||||
import { translateVideoAction } from './lib/actions/translate-a-video';
|
||||
import { videoGenerationCompletedTrigger } from './lib/triggers/video-generation-completed';
|
||||
import { videoGenerationFailedTrigger } from './lib/triggers/video-generation-failed';
|
||||
|
||||
import { heygenAuth } from './lib/common/auth';
|
||||
import { BASE_URL_V1 } from './lib/common/client';
|
||||
|
||||
export const heygen = createPiece({
|
||||
displayName: 'HeyGen',
|
||||
description: 'Generate and manage AI avatar videos using HeyGen.',
|
||||
auth: heygenAuth,
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/heygen.jpg',
|
||||
authors: ['krushnarout'],
|
||||
categories: [PieceCategory.ARTIFICIAL_INTELLIGENCE],
|
||||
actions: [
|
||||
createVideoFromTemplateAction,
|
||||
retrieveTranslatedVideoStatus,
|
||||
retrieveVideoStatusAction,
|
||||
retrieveSharableVideoUrlAction,
|
||||
uploadAssetAction,
|
||||
translateVideoAction,
|
||||
createCustomApiCallAction({
|
||||
auth: heygenAuth,
|
||||
baseUrl: () => BASE_URL_V1,
|
||||
authMapping: async (auth) => {
|
||||
return {
|
||||
'X-Api-Key': auth.secret_text,
|
||||
};
|
||||
},
|
||||
}),
|
||||
],
|
||||
triggers: [videoGenerationCompletedTrigger, videoGenerationFailedTrigger],
|
||||
});
|
||||
@@ -0,0 +1,164 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { heygenAuth } from '../common/auth';
|
||||
import { heygenApiCall } from '../common/client';
|
||||
import {
|
||||
folderDropdown,
|
||||
brandVoiceDropdown,
|
||||
templateDropdown,
|
||||
templateVariables,
|
||||
} from '../common/props';
|
||||
import { isNil } from '@activepieces/shared';
|
||||
|
||||
export const createVideoFromTemplateAction = createAction({
|
||||
auth: heygenAuth,
|
||||
name: 'create-video-from-template',
|
||||
displayName: 'Create Video from Template',
|
||||
description: 'Create a video using a selected template.',
|
||||
props: {
|
||||
templateId: templateDropdown,
|
||||
title: Property.ShortText({
|
||||
displayName: 'Video Title',
|
||||
required: true,
|
||||
description: 'Title of the generated video.',
|
||||
}),
|
||||
caption: Property.Checkbox({
|
||||
displayName: 'Enable Captions',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
includeGif: Property.Checkbox({
|
||||
displayName: 'Include GIF Preview',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
enableSharing: Property.Checkbox({
|
||||
displayName: 'Enable Public Sharing',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
folderId: folderDropdown,
|
||||
brandVoiceId: brandVoiceDropdown,
|
||||
callbackUrl: Property.ShortText({
|
||||
displayName: 'Callback URL',
|
||||
required: false,
|
||||
description: 'Webhook URL to notify when video rendering is complete.',
|
||||
}),
|
||||
dimensionWidth: Property.Number({
|
||||
displayName: 'Video Width',
|
||||
required: false,
|
||||
defaultValue: 1280,
|
||||
}),
|
||||
dimensionHeight: Property.Number({
|
||||
displayName: 'Video Height',
|
||||
required: false,
|
||||
defaultValue: 720,
|
||||
}),
|
||||
variables: templateVariables,
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const {
|
||||
templateId,
|
||||
title,
|
||||
caption,
|
||||
includeGif,
|
||||
enableSharing,
|
||||
folderId,
|
||||
brandVoiceId,
|
||||
callbackUrl,
|
||||
dimensionWidth,
|
||||
dimensionHeight,
|
||||
} = propsValue;
|
||||
|
||||
const inputVariables = propsValue.variables ?? {};
|
||||
|
||||
const template = await heygenApiCall<{
|
||||
data: {
|
||||
variables: { [x: string]: { type: string; name: string; properties: Record<string, any> } };
|
||||
};
|
||||
}>({
|
||||
apiKey: auth as unknown as string,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: `/template/${templateId}`,
|
||||
apiVersion: 'v2',
|
||||
});
|
||||
|
||||
const templateVariables = template.data.variables;
|
||||
const formattedVariables: Record<string, any> = {};
|
||||
|
||||
for (const [key, value] of Object.entries(inputVariables)) {
|
||||
if (isNil(value) || value === '') continue;
|
||||
|
||||
const variable = templateVariables[key];
|
||||
if (!variable) continue;
|
||||
|
||||
const { type, name, properties } = variable;
|
||||
|
||||
const base = { name, type };
|
||||
|
||||
switch (type) {
|
||||
case 'text':
|
||||
formattedVariables[key] = {
|
||||
...base,
|
||||
properties: { content: value },
|
||||
};
|
||||
break;
|
||||
case 'image':
|
||||
case 'video':
|
||||
case 'audio':
|
||||
formattedVariables[key] = {
|
||||
...base,
|
||||
properties: { ...properties, url: value },
|
||||
};
|
||||
break;
|
||||
case 'character':
|
||||
formattedVariables[key] = {
|
||||
...base,
|
||||
properties: { ...properties, character_id: value },
|
||||
};
|
||||
break;
|
||||
case 'voice':
|
||||
formattedVariables[key] = {
|
||||
...base,
|
||||
properties: { ...properties, voice_id: value },
|
||||
};
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const body: Record<string, any> = {
|
||||
template_id: templateId,
|
||||
title,
|
||||
caption: caption === true,
|
||||
include_gif: includeGif === true,
|
||||
enable_sharing: enableSharing === true,
|
||||
};
|
||||
|
||||
if (folderId) body['folder_id'] = folderId;
|
||||
if (brandVoiceId) body['brand_voice_id'] = brandVoiceId;
|
||||
if (callbackUrl) body['callback_url'] = callbackUrl;
|
||||
|
||||
if (dimensionWidth && dimensionHeight) {
|
||||
body['dimension'] = {
|
||||
width: dimensionWidth,
|
||||
height: dimensionHeight,
|
||||
};
|
||||
}
|
||||
|
||||
if (Object.keys(formattedVariables || {}).length) {
|
||||
body['variables'] = formattedVariables;
|
||||
}
|
||||
|
||||
const response = await heygenApiCall({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: `/template/${templateId}/generate`,
|
||||
body,
|
||||
apiVersion: 'v2',
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,30 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { heygenAuth } from '../common/auth';
|
||||
import { heygenApiCall } from '../common/client';
|
||||
|
||||
export const retrieveTranslatedVideoStatus = createAction({
|
||||
auth: heygenAuth,
|
||||
name: 'retrieve-translated-video-status',
|
||||
displayName: 'Retrieve Translated Video Status',
|
||||
description: 'Retrieves the status of a translated video.',
|
||||
props: {
|
||||
videoId: Property.ShortText({
|
||||
displayName: 'Video ID',
|
||||
required: true,
|
||||
description: 'The ID of the translated video to check the status for.',
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const { videoId } = propsValue;
|
||||
|
||||
const response = await heygenApiCall({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: `/video_translate/${videoId}`,
|
||||
apiVersion: 'v2',
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,31 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { heygenApiCall } from '../common/client';
|
||||
import { heygenAuth } from '../common/auth';
|
||||
|
||||
export const retrieveVideoStatusAction = createAction({
|
||||
auth: heygenAuth,
|
||||
name: 'retrieve_video_status',
|
||||
displayName: 'Retrieve Video Status',
|
||||
description: 'Retrieve the status and details of a video using its ID.',
|
||||
props: {
|
||||
videoId: Property.ShortText({
|
||||
displayName: 'Video ID',
|
||||
description: 'The ID of the video to retrieve the status for.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const { videoId } = propsValue;
|
||||
|
||||
const response = await heygenApiCall({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: `/video_status.get`,
|
||||
query: { video_id: videoId },
|
||||
apiVersion: 'v1',
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,31 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { heygenApiCall } from '../common/client';
|
||||
import { heygenAuth } from '../common/auth';
|
||||
|
||||
export const retrieveSharableVideoUrlAction = createAction({
|
||||
auth: heygenAuth,
|
||||
name: 'retrieve_sharable_video_url',
|
||||
displayName: 'Retrieve Sharable Video URL',
|
||||
description: 'Generates a public URL for a video, allowing it to be shared and accessed publicly.',
|
||||
props: {
|
||||
videoId: Property.ShortText({
|
||||
displayName: 'Video ID',
|
||||
description: 'The ID of the video to generate a shareable URL for.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const { videoId } = propsValue;
|
||||
|
||||
const response = await heygenApiCall({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/video/share',
|
||||
body: { video_id: videoId },
|
||||
apiVersion: 'v1',
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,83 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { heygenApiCall } from '../common/client';
|
||||
import { heygenAuth } from '../common/auth';
|
||||
import { brandVoiceDropdown, supportedLanguagesDropdown } from '../common/props';
|
||||
|
||||
export const translateVideoAction = createAction({
|
||||
auth: heygenAuth,
|
||||
name: 'translate_video',
|
||||
displayName: 'Translate Video',
|
||||
description: 'Translate a video into 175+ languages with natural voice and lip-sync.',
|
||||
props: {
|
||||
videoUrl: Property.ShortText({
|
||||
displayName: 'Video URL',
|
||||
required: true,
|
||||
description:
|
||||
'URL of the video file to be translated. Supports direct URLs, Google Drive, and YouTube.',
|
||||
}),
|
||||
title: Property.ShortText({
|
||||
displayName: 'Title',
|
||||
required: false,
|
||||
description: 'Optional title of the translated video.',
|
||||
}),
|
||||
outputLanguage: supportedLanguagesDropdown,
|
||||
translateAudioOnly: Property.Checkbox({
|
||||
displayName: 'Translate Audio Only',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
description: 'Only translate the audio without modifying faces.',
|
||||
}),
|
||||
speakerNum: Property.Number({
|
||||
displayName: 'Number of Speakers',
|
||||
required: false,
|
||||
description: 'Number of speakers in the video (if applicable).',
|
||||
}),
|
||||
brandVoiceId: brandVoiceDropdown,
|
||||
|
||||
callbackId: Property.ShortText({
|
||||
displayName: 'Callback ID',
|
||||
required: false,
|
||||
description: 'Custom ID returned in webhook callback.',
|
||||
}),
|
||||
callbackUrl: Property.ShortText({
|
||||
displayName: 'Callback URL',
|
||||
required: false,
|
||||
description: 'URL to notify when translation is complete.',
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const {
|
||||
videoUrl,
|
||||
title,
|
||||
outputLanguage,
|
||||
translateAudioOnly,
|
||||
speakerNum,
|
||||
callbackId,
|
||||
brandVoiceId,
|
||||
callbackUrl,
|
||||
} = propsValue;
|
||||
|
||||
const body: Record<string, unknown> = {
|
||||
video_url: videoUrl,
|
||||
output_language: outputLanguage,
|
||||
};
|
||||
|
||||
if (title) body['title'] = title;
|
||||
if (translateAudioOnly) body['translate_audio_only'] = translateAudioOnly;
|
||||
if (speakerNum) body['speaker_num'] = speakerNum;
|
||||
if (callbackId) body['callback_id'] = callbackId;
|
||||
if (brandVoiceId) body['brand_voice_id'] = brandVoiceId;
|
||||
if (callbackUrl) body['callback_url'] = callbackUrl;
|
||||
|
||||
const response = await heygenApiCall({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/video_translate',
|
||||
body,
|
||||
apiVersion: 'v2',
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,55 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod, httpClient } from '@activepieces/pieces-common';
|
||||
import { heygenAuth } from '../common/auth';
|
||||
|
||||
export const uploadAssetAction = createAction({
|
||||
auth: heygenAuth,
|
||||
name: 'upload_asset',
|
||||
displayName: 'Upload an Asset',
|
||||
description:
|
||||
'Upload media files (images, videos, or audio) to HeyGen. Supports JPEG, PNG, MP4, WEBM, and MPEG files.',
|
||||
props: {
|
||||
file: Property.File({
|
||||
displayName: 'File',
|
||||
description: 'The file to upload (JPEG, PNG, MP4, WEBM, or MPEG).',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { file } = context.propsValue;
|
||||
|
||||
const getContentType = (filename: string): string => {
|
||||
const extension = filename.toLowerCase().split('.').pop();
|
||||
switch (extension) {
|
||||
case 'jpg':
|
||||
case 'jpeg':
|
||||
return 'image/jpeg';
|
||||
case 'png':
|
||||
return 'image/png';
|
||||
case 'mp4':
|
||||
return 'video/mp4';
|
||||
case 'webm':
|
||||
return 'video/webm';
|
||||
case 'mpeg':
|
||||
case 'mpg':
|
||||
return 'audio/mpeg';
|
||||
default:
|
||||
throw new Error(`Unsupported file type: ${extension}`);
|
||||
}
|
||||
};
|
||||
|
||||
const contentType = getContentType(file.filename);
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: 'https://upload.heygen.com/v1/asset',
|
||||
headers: {
|
||||
'x-api-key': context.auth.secret_text,
|
||||
'Content-Type': contentType,
|
||||
},
|
||||
body: file.data,
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,25 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { PieceAuth } from '@activepieces/pieces-framework';
|
||||
import { heygenApiCall } from './client';
|
||||
|
||||
export const heygenAuth = PieceAuth.SecretText({
|
||||
displayName: 'API Key',
|
||||
description: `You can obtain your API key by navigating to your Space Settings in HeyGen App.`,
|
||||
required: true,
|
||||
validate: async ({ auth }) => {
|
||||
try {
|
||||
await heygenApiCall({
|
||||
apiKey: auth as string,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: '/user/me',
|
||||
apiVersion: 'v1',
|
||||
});
|
||||
return { valid: true };
|
||||
} catch {
|
||||
return {
|
||||
valid: false,
|
||||
error: 'Invalid API Key.',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,53 @@
|
||||
import {
|
||||
httpClient,
|
||||
HttpMessageBody,
|
||||
HttpMethod,
|
||||
HttpRequest,
|
||||
QueryParams,
|
||||
} from '@activepieces/pieces-common';
|
||||
|
||||
export type HeygenApiCallParams = {
|
||||
apiKey: string;
|
||||
method: HttpMethod;
|
||||
resourceUri: string;
|
||||
query?: Record<string, string | number | string[] | undefined>;
|
||||
body?: unknown;
|
||||
apiVersion: 'v1' | 'v2';
|
||||
};
|
||||
|
||||
export const BASE_URL_V1 = 'https://api.heygen.com/v1';
|
||||
export const BASE_URL_V2 = 'https://api.heygen.com/v2';
|
||||
|
||||
export async function heygenApiCall<T extends HttpMessageBody>({
|
||||
apiKey,
|
||||
method,
|
||||
resourceUri,
|
||||
query,
|
||||
body,
|
||||
apiVersion,
|
||||
}: HeygenApiCallParams): Promise<T> {
|
||||
const qs: QueryParams = {};
|
||||
|
||||
if (query) {
|
||||
for (const [key, value] of Object.entries(query)) {
|
||||
if (value !== null && value !== undefined) {
|
||||
qs[key] = String(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const url = (apiVersion === 'v1' ? BASE_URL_V1 : BASE_URL_V2) + resourceUri;
|
||||
|
||||
const request: HttpRequest = {
|
||||
method,
|
||||
url,
|
||||
headers: {
|
||||
'X-Api-Key': apiKey,
|
||||
},
|
||||
queryParams: qs,
|
||||
body,
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest<T>(request);
|
||||
return response.body;
|
||||
}
|
||||
@@ -0,0 +1,265 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { DynamicPropsValue, Property } from '@activepieces/pieces-framework';
|
||||
import { heygenApiCall } from './client';
|
||||
import { isNil } from '@activepieces/shared';
|
||||
import { heygenAuth } from './auth';
|
||||
|
||||
export const folderDropdown = Property.Dropdown({
|
||||
displayName: 'Folder',
|
||||
description: 'Select the folder to store the video.',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
auth: heygenAuth,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first.',
|
||||
};
|
||||
}
|
||||
|
||||
const response = await heygenApiCall<{
|
||||
data: { folders: { id: string; name: string }[] };
|
||||
}>({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: '/folders',
|
||||
apiVersion: 'v1',
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: response.data.folders.map((folder) => ({
|
||||
label: folder.name,
|
||||
value: folder.id,
|
||||
})),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const brandVoiceDropdown = Property.Dropdown({
|
||||
auth: heygenAuth,
|
||||
displayName: 'Brand Voice',
|
||||
description: 'Select the Brand Voice to apply to the video.',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first.',
|
||||
};
|
||||
}
|
||||
|
||||
const response = await heygenApiCall<{
|
||||
data: { list: { id: string; name: string }[] };
|
||||
}>({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: '/brand_voice/list',
|
||||
apiVersion: 'v1',
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: response.data.list.map((voice) => ({
|
||||
label: voice.name,
|
||||
value: voice.id,
|
||||
})),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const templateDropdown = Property.Dropdown({
|
||||
auth: heygenAuth,
|
||||
displayName: 'Template',
|
||||
description: 'Select the template to generate the video.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first.',
|
||||
};
|
||||
}
|
||||
|
||||
const response = await heygenApiCall<{
|
||||
data: { templates: { template_id: string; name: string; aspect_ratio: string }[] };
|
||||
}>({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: '/templates',
|
||||
apiVersion: 'v2',
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: response.data.templates.map((template) => ({
|
||||
label: template.name,
|
||||
value: template.template_id,
|
||||
})),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const supportedLanguagesDropdown = Property.Dropdown({
|
||||
auth: heygenAuth,
|
||||
displayName: 'Supported Language',
|
||||
description: 'Select the language for video translation.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first.',
|
||||
};
|
||||
}
|
||||
|
||||
const response = await heygenApiCall<{ data: { languages: string[] } }>({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: '/video_translate/target_languages',
|
||||
apiVersion: 'v2',
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: response.data.languages.map((lang) => ({
|
||||
label: lang,
|
||||
value: lang,
|
||||
})),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const templateVariables = Property.DynamicProperties({
|
||||
auth: heygenAuth,
|
||||
displayName: 'Template Varriables',
|
||||
refreshers: ['templateId'],
|
||||
required: false,
|
||||
props: async ({ auth, templateId }) => {
|
||||
if (!auth || !templateId) return {};
|
||||
|
||||
const fields: DynamicPropsValue = {};
|
||||
|
||||
try {
|
||||
const response = await heygenApiCall<{
|
||||
data: { variables: { [x: string]: { type: string; name: string } } };
|
||||
}>({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: `/template/${templateId}`,
|
||||
apiVersion: 'v2',
|
||||
});
|
||||
|
||||
const variables = response.data.variables;
|
||||
|
||||
if (!isNil(variables)) return {};
|
||||
|
||||
for (const [key, value] of Object.entries(response.data.variables)) {
|
||||
const fieldKey = key;
|
||||
const fieldType = value.type;
|
||||
|
||||
switch (fieldType) {
|
||||
case 'text':
|
||||
fields[fieldKey] = Property.ShortText({
|
||||
displayName: fieldKey,
|
||||
required: false,
|
||||
description: 'Provide text value.',
|
||||
});
|
||||
break;
|
||||
case 'image':
|
||||
fields[fieldKey] = Property.ShortText({
|
||||
displayName: fieldKey,
|
||||
required: false,
|
||||
description: 'Provide image URL.',
|
||||
});
|
||||
break;
|
||||
case 'video':
|
||||
fields[fieldKey] = Property.ShortText({
|
||||
displayName: fieldKey,
|
||||
required: false,
|
||||
description: 'Provide video URL.',
|
||||
});
|
||||
break;
|
||||
case 'audio':
|
||||
fields[fieldKey] = Property.ShortText({
|
||||
displayName: fieldKey,
|
||||
required: false,
|
||||
description: 'Provide audio URL.',
|
||||
});
|
||||
break;
|
||||
case 'character': {
|
||||
const characters = await heygenApiCall<{
|
||||
avatars: { avatar_name: string; avatar_id: string }[];
|
||||
talking_photos: {
|
||||
talking_photo_id: string;
|
||||
talking_photo_name: string;
|
||||
}[];
|
||||
}>({
|
||||
apiKey: auth as unknown as string,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: `/avatars`,
|
||||
apiVersion: 'v2',
|
||||
});
|
||||
|
||||
const options = [
|
||||
...characters.avatars.map((avatar) => ({
|
||||
label: avatar.avatar_name,
|
||||
value: avatar.avatar_id,
|
||||
})),
|
||||
...characters.talking_photos.map((photo) => ({
|
||||
label: photo.talking_photo_name,
|
||||
value: photo.talking_photo_id,
|
||||
})),
|
||||
];
|
||||
|
||||
fields[fieldKey] = Property.StaticDropdown({
|
||||
displayName: fieldKey,
|
||||
required: false,
|
||||
description: 'Select one of avatar or talking photo.',
|
||||
options: { disabled: false, options },
|
||||
});
|
||||
break;
|
||||
}
|
||||
case 'voice': {
|
||||
const voices = await heygenApiCall<{
|
||||
voices: { name: string; voice_id: string }[];
|
||||
}>({
|
||||
apiKey: auth as unknown as string,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: `/voices`,
|
||||
apiVersion: 'v2',
|
||||
});
|
||||
|
||||
fields[fieldKey] = Property.StaticDropdown({
|
||||
displayName: fieldKey,
|
||||
required: false,
|
||||
options: {
|
||||
disabled: false,
|
||||
options: voices.voices.map((voice) => ({
|
||||
label: voice.name,
|
||||
value: voice.voice_id,
|
||||
})),
|
||||
},
|
||||
});
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return fields;
|
||||
} catch (error) {
|
||||
console.error(`${error instanceof Error ? error.message : 'Unknown error'}`);
|
||||
return {};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,67 @@
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { heygenApiCall } from '../common/client';
|
||||
import { heygenAuth } from '../common/auth';
|
||||
|
||||
const TRIGGER_KEY = 'video_generation_completed_trigger';
|
||||
|
||||
export const videoGenerationCompletedTrigger = createTrigger({
|
||||
auth: heygenAuth,
|
||||
name: 'video_generation_completed',
|
||||
displayName: 'New Avatar Video Event (Success)',
|
||||
description: 'Triggers when a video is generated successfully.',
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
props: {},
|
||||
sampleData: {
|
||||
event_type: 'avatar_video.success',
|
||||
event_data: {
|
||||
video_id: '123',
|
||||
url: 'https://www.example.com',
|
||||
gif_download_url: '<gif_url>',
|
||||
folder_id: '123',
|
||||
callback_id: '123',
|
||||
},
|
||||
},
|
||||
|
||||
async onEnable(context) {
|
||||
const webhook = (await heygenApiCall({
|
||||
apiKey: context.auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/webhook/endpoint.add',
|
||||
apiVersion: 'v1',
|
||||
body: {
|
||||
url: context.webhookUrl,
|
||||
events: ['avatar_video.success'],
|
||||
},
|
||||
})) as { data: { endpoint_id: string } };
|
||||
|
||||
await context.store.put<string>(TRIGGER_KEY, webhook.data.endpoint_id);
|
||||
},
|
||||
|
||||
async onDisable(context) {
|
||||
const webhookId = await context.store.get<string>(TRIGGER_KEY);
|
||||
|
||||
if (webhookId) {
|
||||
await heygenApiCall({
|
||||
apiKey: context.auth.secret_text,
|
||||
method: HttpMethod.DELETE,
|
||||
resourceUri: '/webhook/endpoint.delete',
|
||||
apiVersion: 'v1',
|
||||
query: {
|
||||
endpoint_id: webhookId,
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const payload = context.payload.body as {
|
||||
event_type: string;
|
||||
event_data: Record<string, any>;
|
||||
};
|
||||
|
||||
if (payload.event_type !== 'avatar_video.success') return [];
|
||||
|
||||
return [payload.event_data];
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,66 @@
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { heygenApiCall } from '../common/client';
|
||||
import { heygenAuth } from '../common/auth';
|
||||
|
||||
const TRIGGER_KEY = 'video_generation_failed_trigger';
|
||||
|
||||
export const videoGenerationFailedTrigger = createTrigger({
|
||||
auth: heygenAuth,
|
||||
name: 'video_generation_failed',
|
||||
displayName: 'New Avatar Video Event (Fail)',
|
||||
description: 'Triggers when a video generation process fails.',
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
props: {},
|
||||
|
||||
sampleData: {
|
||||
event_type: 'avatar_video.fail',
|
||||
event_data: {
|
||||
video_id: 'abc',
|
||||
msg: 'Failed',
|
||||
callback_id: '123',
|
||||
},
|
||||
},
|
||||
|
||||
async onEnable(context) {
|
||||
const webhook = (await heygenApiCall({
|
||||
apiKey: context.auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/webhook/endpoint.add',
|
||||
apiVersion: 'v1',
|
||||
body: {
|
||||
url: context.webhookUrl,
|
||||
events: ['avatar_video.fail'],
|
||||
},
|
||||
})) as { data: { endpoint_id: string } };
|
||||
|
||||
await context.store.put<string>(TRIGGER_KEY, webhook.data.endpoint_id);
|
||||
},
|
||||
|
||||
async onDisable(context) {
|
||||
const webhookId = await context.store.get<string>(TRIGGER_KEY);
|
||||
|
||||
if (webhookId) {
|
||||
await heygenApiCall({
|
||||
apiKey: context.auth.secret_text,
|
||||
method: HttpMethod.DELETE,
|
||||
resourceUri: '/webhook/endpoint.delete',
|
||||
apiVersion: 'v1',
|
||||
query: {
|
||||
endpoint_id: webhookId,
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const payload = context.payload.body as {
|
||||
event_type: string;
|
||||
event_data: Record<string, any>;
|
||||
};
|
||||
|
||||
if (payload.event_type !== 'avatar_video.fail') return [];
|
||||
|
||||
return [payload];
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"extends": "../../../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"noImplicitOverride": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noPropertyAccessFromIndexSignature": true
|
||||
},
|
||||
"files": [],
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"outDir": "../../../../dist/out-tsc",
|
||||
"declaration": true,
|
||||
"types": ["node"]
|
||||
},
|
||||
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"],
|
||||
"include": ["src/**/*.ts"]
|
||||
}
|
||||
Reference in New Issue
Block a user