Communitygithub.com

0xsline/openchatcut – Formulaires Widget

Permet à l'agent de demander à l'utilisateur une entrée structurée via un formulaire intégré au chat, avec sélection unique, sélection multiple, champs de texte, sélecteurs de style ou choix d'audition vocale.

Qu'est-ce que openchatcut – Formulaires Widget ?

Cette compétence, nommée `0xsline/openchatcut`, permet à l'agent d'utiliser l'outil **Widget Forms** pour créer des formulaires interactifs dans le chat de l'éditeur, remplaçant la saisie manuelle de code. Elle est conçue pour les agents d'IA comme Claude Code, Cursor ou Codex qui doivent collecter des informations structurées de manière conviviale et efficace. Le cœur de la compétence repose sur l'appel `ask_followup_questions` qui sérialise les champs du formulaire en une carte interactive ; la réponse de l'utilisateur apparaît ensuite comme son prochain message. Elle prend en charge jusqu'à 12 champs, avec plusieurs types : sélection unique (`single`), sélection multiple (`multi`), texte (`text`), sélection visuelle (`visual`), audition vocale (`voice`) et scénario de démarrage (`scenario`). Pour les scénarios, les identifiants canoniques incluent `talking-head`, `motion-graphics`, `long-video-to-shorts`, `app-promo`, `ai-cinematic-short-film`, `explainer` et `__other__`. Les champs visuels utilisent des URLs d'images réelles, et les champs vocaux une URL audio (de préférence un chemin documenté comme `/voice-samples/doubao-liuchang.mp3`). Le ton du formulaire doit être chaleureux, orienté action, et éviter les étiquettes rigides. Les fichiers doivent être téléchargés séparément via l'interface de l'éditeur (glisser-déposer, bouton d'upload ou collage). L'outil ne supporte pas les champs de téléchargement de fichiers, ni le HTML personnalisé, ni les ponts de paramètres de timeline.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/0xsline/openchatcut/tree/HEAD/src/agent/skills/widget-forms

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Formulaires Widget

Utilisez l'outil de formulaire au lieu d'écrire du balisage à la main : le chat de l'éditeur affiche le formulaire sous forme de carte interactive et renvoie la réponse structurée de l'utilisateur.

Règle d'exécution

Appelez ask_followup_questions. Il sérialise vos champs dans la carte de formulaire native de l'éditeur ; la soumission de l'utilisateur revient comme son prochain message.

Planifiez l'intégralité du questionnaire avant d'appeler l'outil. Envoyez un seul formulaire final, pas un formulaire d'essai suivi d'un formulaire corrigé. L'outil supporte au maximum 12 champs ; si l'utilisateur demande plus de questions, fusionnez les invites connexes en champs combinés avant le premier appel.

Après avoir appelé ask_followup_questions, arrêtez le tour et attendez que la réponse soumise apparaisse dans le chat. N'appliquez pas de choix, ne créez pas d'actifs et ne continuez pas la planification à partir d'une recommandation tant que la sélection de l'utilisateur n'est pas présente dans la conversation.

Correspondance des champs supportés

Construisez un tableau fields. Écrivez chaque chaîne visible dans la langue de la conversation de l'utilisateur.

  • <form-single> natif -> { type: "single", variant: "default" }
  • <form-multi> natif -> { type: "multi", variant: "default" }
  • <form-text> / <form-textarea> natif -> { type: "text" }
  • <form-visual> natif -> { type: "single", variant: "visual" }
  • Cartes d'audition vocale -> { type: "single", variant: "voice" }
  • Cartes de scénario de démarrage natif -> { type: "single", variant: "scenario" }

Ton du texte du formulaire

Pour le texte du formulaire (title, prompt, fields[].label, submitLabel et messagePrefix), écrivez comme si OpenChatCut était un partenaire de réalisation vidéo compétent invitant l'utilisateur à décrire ce qu'il veut, pas comme une enquête rigide.

Visez :

  • Un ton chaleureux, ouvert et orienté action. Le texte doit suggérer « choisissez le besoin vidéo le plus proche ou dites-moi simplement votre idée ; nous pouvons trouver une solution ensemble ».
  • Court et facile à parcourir. Utilisez une phrase naturelle pour prompt et des étiquettes de questions concises.
  • Un cadrage honnête des capacités. OpenChatCut peut aider avec de nombreux workflows vidéo, mais ne prétendez pas à des capacités non supportées et ne garantissez pas un résultat avant que les entrées ne soient connues.
  • La langue de l'utilisateur et les termes produits locaux. Conservez « OpenChatCut », « B-roll », « Motion Graphics », « MG 动画 », les noms de modèles/produits et les noms de plateformes sous leurs formes établies.
  • Un langage créatif tourné vers l'utilisateur. Pour les formulaires de planification précoce ou de recueil d'idées créatives, préférez des termes naturels comme idée, direction, plan, histoire, liste de plans, public, ambiance ou besoin vidéo plutôt que le langage de documentation de production interne.

Évitez les étiquettes rigides comme « Sélectionner le type de vidéo », « Veuillez choisir le type de vidéo pour ce projet » ou « Quel type de vidéo voulez-vous faire ? » pour la saisie de scénario, sauf si l'hôte n'a pas la place pour un texte plus chaleureux.

Pour un formulaire de saisie de scénario, préférez un texte comme :

{
  "title": "Que voulez-vous créer ?",
  "prompt": "Choisissez le scénario vidéo le plus proche, ou choisissez Autre chose et décrivez votre idée.",
  "submitLabel": "Commencer la création",
  "messagePrefix": "Je veux commencer avec cette direction vidéo :",
  "fields": [
    {
      "id": "scenario",
      "label": "Quel scénario correspond le mieux à votre vidéo ?",
      "type": "single",
      "variant": "scenario",
      "otherPlaceholder": "Par exemple : transformer mes séquences de voyage en vlog d'ambiance / réaliser une vidéo de lancement pour un nouveau produit"
    }
  ]
}

N'incluez pas de questions de téléchargement de fichiers dans les formulaires. Si une tâche nécessite réellement des médias sources et que le projet/chat n'en a pas déjà, demandez séparément à l'utilisateur de télécharger des fichiers dans l'éditeur (glisser-déposer ou le bouton d'upload, ou coller dans le composeur du chat). Le téléchargement de fichiers n'est pas un prérequis par défaut pour chaque questionnaire ; ne le demandez que lorsque l'étape d'édition suivante dépend de médias manquants.

Pour les champs de choix :

  • Utilisez id pour la valeur interne dont le prochain appel d'outil a besoin.
  • Utilisez label pour ce que l'utilisateur voit.
  • Pour les cartes de sélection unique et de sélection multiple ordinaires (variant: "default"), gardez les options avec seulement un libellé. N'ajoutez pas de description par option à moins que l'utilisateur ne puisse pas distinguer les choix à partir des libellés seuls.
  • Utilisez description principalement pour les cartes vocales. Les cartes de style visuel devraient généralement utiliser seulement preview + label.
  • Lorsqu'une réponse hors liste est acceptable, ajoutez une option explicite avec id: "__other__" et un label dans la même langue que le reste du formulaire, en utilisant le mot auquel l'utilisateur s'attendrait pour une réponse hors liste. Le widget transformera cette option en champ de texte lorsqu'elle sera sélectionnée. Utilisez otherPlaceholder si le champ de texte nécessite un placeholder.

Pour les cartes visuelles :

  • Utilisez de vraies URLs d'image ou des URLs d'image de données dans preview.
  • Pour les choix de catalogue de style de design, appelez d'abord manage_design_style avec action: "list", puis mappez chaque préréglage retourné à { id: preset.presetId, label: preset.name } (pas de miniatures dans cette version).
  • Ne codez jamais en dur les identifiants de préréglages de catalogue à moins que l'utilisateur n'en ait déjà sélectionné un.

Pour les cartes vocales :

  • Utilisez audioUrl pour le fichier échantillon.
  • Préférez le chemin d'échantillon documenté comme /voice-samples/doubao-liuchang.mp3 ou une URL HTTPS publique. Ne passez pas d'URL d'échantillon localhost ; les iframes de l'hôte MCP ne résolvent pas de manière fiable les médias locaux de l'éditeur.
  • Gardez les descriptions visibles par l'utilisateur neutres envers les fournisseurs. Décrivez la voix de la même manière que l'UI native d'audition d'OpenChatCut : genre / tranche d'âge / ton / cas d'utilisation, par exemple Féminin / jeune / amical, général ou 男 / 中年 / 低沉知识解说. Ne montrez pas de noms de fournisseurs comme ElevenLabs ou Doubao dans les descriptions d'options.
  • Conservez l'id de l'option égal à l'identifiant vocal du fournisseur nécessaire pour submit_voice.

Pour les cartes de scénario de démarrage natif :

  • Utilisez-les lorsque l'utilisateur doit choisir quel workflow vidéo OpenChatCut démarrer, comme le montage de tête parlante, l'animation MG, la transformation de longues vidéos en courtes, la promotion de produit/app, le court métrage IA ou la vidéo explicative.
  • Présentez-les comme des besoins/scénarios vidéo courants, pas comme les seuls workflows vidéo possibles. Le formulaire doit également permettre à l'utilisateur de décrire un besoin vidéo différent.
  • Utilisez exactement un champ de sélection unique avec variant: "scenario".
  • Fournissez des options en utilisant les identifiants canoniques ci-dessous et des libellés localisés dans la langue de l'utilisateur. Incluez id: "__other__" uniquement lorsque vous devez personnaliser le libellé hors liste ; sinon, le backend ajoute une option Autre localisée.
  • Les libellés/descriptions/invites de démarrage de scénario en anglais, chinois et espagnol sont intégrés. Pour toute autre langue d'utilisateur, traduisez fidèlement le label, la description et l'invite de démarrage anglais de chaque scénario dans la langue de l'utilisateur et passez ces valeurs localisées dans les objets d'option. Préservez les termes de produit OpenChatCut et le sens du workflow ; n'ajoutez pas de nouvelles exigences. Utilisez submitPrompt pour l'invite de démarrage traduite. Cette surcharge est spécifique à variant: "scenario" ; les cartes d'options ordinaires, les cartes vocales et les cartes de style visuel obtiennent déjà leur texte visible à partir des valeurs que vous passez.
  • Ne fournissez pas de preview ou audioUrl personnalisé ; le backend remplit l'image de prévisualisation native du premier écran.
  • Identifiants canoniques : talking-head, motion-graphics, long-video-to-shorts, app-promo, ai-cinematic-short-film, explainer, plus __other__ pour un besoin vidéo libre.
  • Exemple d'options : { "id": "talking-head", "label": "Montage de tête parlante" }, { "id": "motion-graphics", "label": "Motion Graphics" }, { "id": "long-video-to-shorts", "label": "Longue vidéo en courtes" }, { "id": "app-promo", "label": "Promotion de produit / application" }, { "id": "ai-cinematic-short-film", "label": "Court métrage IA" }, { "id": "explainer", "label": "Vidéo explicative" }, { "id": "__other__", "label": "Autre chose" }.

Lacunes actuelles

ask_followup_questions est destiné uniquement aux réponses structurées. Il ne supporte pas le HTML personnalisé natif, les ponts de paramètres de timeline, la sélection d'éléments de l'éditeur ou les champs de téléchargement de fichiers. Pour les fichiers déjà détenus par l'environnement d'exécution de l'agent ou attachés directement au chat en dehors de cette carte, le workflow d'importation de médias est toujours valide : appelez import_media et exécutez le chemin d'assistance/téléchargement direct. Pour les fichiers que l'utilisateur souhaite placer directement dans un projet, demandez-lui d'utiliser l'UI de téléchargement de l'éditeur OpenChatCut.

Exemple

{
  "title": "Votre idée vidéo",
  "prompt": "Choisissez ou remplissez ce que vous avez en tête pour qu'OpenChatCut puisse choisir une bonne direction de départ.",
  "submitLabel": "Envoyer l'idée",
  "messagePrefix": "Continuer avec cette direction vidéo :",
  "fields": [
    {
      "id": "goal",
      "label": "Quel est l'objectif principal de cette vidéo ?",
      "type": "single",
      "options": [
        { "id": "product_intro", "label": "Présentation de produit" },
        { "id": "social_ad", "label": "Publicité sociale" },
        { "id": "__other__", "label": "Autre chose" }
      ]
    },
    {
      "id": "elements",
      "label": "Que devrait-elle inclure ? (Sélectionnez tout ce qui s'applique)",
      "type": "multi",
      "options": [
        { "id": "broll", "label": "B-roll" },
        { "id": "logo", "label": "Logo de la marque" },
        { "id": "__other__", "label": "Autre chose" }
      ]
    }
  ]
}

Individual skills in this repo

This repo contains 11 individual skills — each has its own dedicated page.

0xsline/openchatcut

Connect an MCP-capable coding agent to OpenChatCut and edit local video projects. Use when the user asks to install, connect, or set up OpenChatCut; inspect or edit an OpenChatCut project; work with its timeline, transcript, captions, media, generation, motion graphics, audio, color, or export tools; or recover from an OpenChatCut MCP error.

0xsline/openchatcut

Use when acquiring or importing media into a OpenChatCut project asset library for video editing or creation, including local/attached videos, user-provided paths, public media URLs, web video/audio/image assets, upload fallback decisions, and deciding between import_media, download_media, or manual user action.

0xsline/openchatcut

Use when a OpenChatCut video editing or creation workflow needs export, render, download, share, final delivery, subtitle-file export, render choice, local-only asset handling, or export fallback explanation.

0xsline/openchatcut

AI image generation via Fal.ai, gpt-image-2, nano-banana, MiniMax image-01, and xAI Grok Imagine. Use when the user wants to generate or create an image / picture / still.

0xsline/openchatcut

Use when a OpenChatCut tool call fails or returns an unexpected shape.

0xsline/openchatcut

Music generation via Mureka, MiniMax, Atlas Cloud, and Sonilo. Use for instrumentals, songs, soundtracks, track/stem generation, covers, or video-conditioned scoring of the finished cut through `submit_music`.

0xsline/openchatcut

OpenChatCut product knowledge — UI layout, editor features, and how generation providers are configured. Use when the user asks about the product interface, how to use a feature, where to find something, or needs GUI guidance for something the agent cannot do directly. Also use as fallback when a task fails and the user needs to complete it manually in the UI. NOT for live project-state queries ("where are my folders?", "what's on my timeline?", "where is clip X?") — those are answered by `read_project`, not by this skill.

0xsline/openchatcut

AI shader generator for WebGL video effects, transitions, masks, and color grading (LUT / 调色 / 电影感 / film look). Use when the user wants a video effect (滤镜 / 特效), a transition (转场 / crossfade / wipe / cube / 3d), a mask (蒙版 / 遮罩 / reveal), a zoom / push-in (推近 / 推镜头), or a color grade — try the built-in effects (zoom, builtin LUTs) before generating a new shader.

0xsline/openchatcut

Use when checking whether agent edits are reflected in the OpenChatCut project and editor.

0xsline/openchatcut

AI video generation via Fal.ai, Seedance 2.0, Kling, MiniMax Hailuo, xAI Grok Imagine, and OFox. Use when the user wants to generate a video clip — text-to-video, image-to-video, first/last-frame transitions, reference-guided generation, multi-shot, or generatively editing / extending an existing clip.

0xsline/openchatcut

Text-to-Speech (TTS), voiceover, narration placement/sync, and custom sound effects (SFX) generator. Use when the user wants generated speech from text, wants to add/replace/align narration or voiceover for an existing video/timeline, wants to keep existing voiceover synced after visual retiming edits, needs voice audition/selection, or explicitly wants a newly generated/custom sound effect that is not available in the Sound Effects library.

Skills associés