Communitygithub.com

Tutoriel d'écran sur une timeline Resolve

Crée un tutoriel logiciel, une démonstration produit ou une présentation d'écran comme une timeline DaVinci Resolve modifiable à partir de captures d'écran, avec des mouvements de caméra en keyframes réels de l'Inspector, un curseur animé, des ondulations de clic, des surbrillances d'éléments, des barres de légende avec étiquettes de rôle ou d'étape, et des cartes de titre et de fin sous forme de titres Fusion de marque avec contrôles dans l'Inspector.

Qu'est-ce que Tutoriel d'écran sur une timeline Resolve ?

Ce skill transforme une description textuelle de tutoriel (fichier `film.json`) et ses captures d'écran en une timeline DaVinci Resolve entièrement modifiable, prête à être retravaillée par un monteur. Les clips utilisent des keyframes standard de l'Inspector, les titres sont des titres Fusion avec contrôles accessibles dans l'Inspector, et les scènes sont clairement marquées. Le skill ne génère pas d'audio, laissant la place à une narration et une musique ajoutées ultérieurement. Fonctionnalités clés : mouvements de caméra réalistes (zoom, panoramique) avec keyframes, curseur animé, ondulations de clic, surbrillances d'éléments mesurées avec précision, barres de légende, et cartes de début/fin en titres Fusion personnalisables (couleurs, police, logo). Il utilise des scripts Python combinés à l'API Resolve pour contourner les limitations de l'API (impossibilité de définir des keyframes ou la durée d'un titre) en écrivant directement le fichier de timeline. Plateformes supportées : DaVinci Resolve Studio (version 21.2+ recommandé), Python avec Pillow, ffmpeg. Le skill inclut un pipeline complet : validation préliminaire (`preflight`), planification (`plan.py`), installation des modèles de titres (`templates.py`), construction de la timeline (`build_film`), vérification visuelle par captures d'écran (`review_frames`), et rendu final. Il gère les conflits de noms de timeline, les avertissements de mesure, et propose un nettoyage. Limitations : pas d'audio, uniquement des images fixes (pas de vidéo), les surbrillances restent fixes pendant les mouvements de caméra, et les titres installés sont remplacés à chaque build. Le skill est conçu pour être utilisé via des agents IA comme Cursor ou Codex, avec des étapes exécutées dans Resolve via `run_script_unsafe` et en ligne de commande.

Compatible avec~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/MusicProWorkshop/davinci-resolve-skills/tree/HEAD/plugins/davinci-resolve-timelines/skills/resolve-screen-tutorial

Demander à votre IA préférée

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

Documentation

Que fait Tutoriel d'écran sur une timeline Resolve ?

Transforme une description d'un tutoriel (film.json) et ses captures d'écran en une timeline qu'un monteur peut continuer à travailler. Les clips ont des keyframes ordinaires dans l'Inspector, les titres sont des titres Fusion avec des contrôles dans l'Inspector, et les scènes sont marquées. Il n'ajoute pas de son, donc la narration et la musique viendront après.

L'API Resolve ne peut pas définir de keyframes ni la durée d'un titre, donc la construction les écrit dans un fichier de timeline et l'importe. references/how-it-works.md explique cela et liste les problèmes connus. Lisez-le si une étape échoue ou si Resolve est plus récent que la version 21.2.

Avant de commencer

  • Resolve Studio est en cours d'exécution avec un projet ouvert. Vérifiez avec get_resolve_status, et appelez get_whats_new une fois avec since défini à 21.0, comme le demande le serveur Resolve.
  • En dehors de Resolve : Python avec pillow, et ffmpeg dans le PATH.
  • Le format de la timeline du projet doit être 1920x1080. preflight vérifie cela.

Décider avec l'utilisateur

Réglez ces points à partir de la conversation si possible, et ne demandez que ce qui manque :

  1. Le projet. La timeline va dans le projet ouvert. Nommez-le d'après l'utilisateur. Changer de projet pourrait perdre leur travail non sauvegardé, donc demandez-leur de changer si ce n'est pas le bon.
  2. Les captures d'écran. Elles viennent de l'utilisateur, ou vous les capturez. Avec Playwright, utilisez une fenêtre de 1920x1080 avec deviceScaleFactor: 2 : les images sortent en 3840x2160, et getBoundingClientRect donne des positions déjà correctes pour film.json. Examinez chaque image fournie, utilisez celles qui correspondent au public, et dites à l'utilisateur ce que vous avez laissé de côté.
  3. La marque. Couleurs, police, logo, et toutes les étiquettes telles que Hôte ou Administrateur. Cherchez d'abord dans le code de l'utilisateur ou les titres précédents. Text+ ne voit que les polices installées, et n'en installez pas sans demander.
  4. Le nom de la timeline. Choisissez-en un qui est libre. Ne remplacez jamais une timeline que vous n'avez pas construite.

Écrire le film

Créez un dossier pour le film et écrivez film.json dedans. references/film-format.md contient le format. Lisez-le maintenant.

Quelques timings qui rendent bien :

  • Affichez une scène pendant 6 à 10 s, et gardez une légende assez longtemps pour être lue deux fois, environ 1 s pour 8 caractères.
  • Déplacez la caméra sur environ 1 s, et laissez-la se stabiliser avant que le curseur ne bouge ou que la surbrillance n'apparaisse.
  • Déplacez le curseur sur environ 0,8 s, et cliquez environ 0,3 s après son arrivée.
  • Montrez le résultat d'un clic avec un nouveau plan juste après, si la mise en page du nouveau plan s'aligne au zoom actuel. Si la page change complètement, terminez la scène juste après le clic et laissez le fondu enchaîné porter vers la suivante.
  • Pour garder le curseur immobile pendant un fondu enchaîné, commencez le curseur de la scène suivante au même endroit sur l'image, en utilisant x' = tx + x * zoom.
  • Utilisez une carte d'environ 3 s à chaque extrémité.

Les légendes ne doivent dire que ce que les captures d'écran montrent ou ce que l'utilisateur vous a dit, et tout ce que vous avez déduit va dans votre rapport.

Une surbrillance qui manque son bouton est l'erreur la plus visible que ce format peut produire, donc mesurez plutôt que d'estimer. Les images peuvent s'afficher à une échelle différente de leur taille réelle, donc ne lisez pas les positions directement dessus :

python "<SKILL>/scripts/measure.py" grid shot.png grid.png

Ouvrez grid.png, qui a des coordonnées d'image marquées, pour trouver un point approximatif sur le remplissage du bouton. Ensuite, obtenez son rectangle exact et vérifiez le résultat :

python "<SKILL>/scripts/measure.py" at shot.png 1250 470
python "<SKILL>/scripts/measure.py" show shot.png check.png 1200,450,180,40

Un bouton dont la bordure correspond à une couleur voisine peut fuiter, donc lisez les avertissements et abaissez la tolérance si le rectangle semble trop grand.

Construction

SKILL est le dossier de cette compétence et WORK est le dossier du film. Les étapes shell s'exécutent depuis n'importe où. Les étapes Resolve passent par run_script_unsafe. Passez timeout: 60 à chaque appel, car la valeur par défaut de l'outil est de 10 s et les étapes peuvent prendre plus de temps. Chacune commence par :

SKILL = r'<ce dossier de compétence>'; WORK = r'<dossier du film>'
exec(open(SKILL + r'\scripts\resolve_steps.py', encoding='utf8').read())

Avant que film.json n'existe, project_format(project) donne la taille du projet, la fréquence d'images et les timelines, et fonts_available('Lato', ...) les polices installées et leurs styles. Définissez fps à la fréquence du projet sauf s'il y a une raison de ne pas le faire.

1. Vérifier le projet. Corrigez tout ce qui est dans problems avant de continuer, en demandant à l'utilisateur quand c'est sa décision, et transmettez les éventuelles notes. Cela ne change rien.

result = preflight(project, WORK)

2. Planifier et installer les titres. Lisez les avertissements et corrigez ce qui est important dans film.json. Cela place les titres dans le dossier Modèles de Resolve pour la marque, en remplaçant ceux qui ont le même nom, donc prévenez l'utilisateur.

python "<SKILL>/scripts/plan.py" "<WORK>"
python "<SKILL>/scripts/templates.py" "<WORK>" --install

3. Construire la timeline. Cela exporte les blocs de construction, écrit le fichier de timeline, l'importe, applique les paramètres que l'API peut définir, vérifie le résultat et supprime les deux timelines temporaires de cette construction. Elle ne remplace qu'une timeline que ce dossier a construite, et les modifications qui y sont apportées sont perdues, donc demandez d'abord si l'utilisateur a pu la modifier.

result = build_film(project, WORK)

verify.problems doit être vide. Si done est faux, répétez result = finish_batch(project, WORK) jusqu'à ce qu'il soit vrai, puis exécutez result = dict(verify=verify(project, WORK), cleanup=cleanup(project, WORK)). Resolve peut prendre quelques secondes pour voir les titres nouvellement installés, donc build_film les attend. S'il ne peut toujours pas les insérer, demandez à l'utilisateur de redémarrer Resolve après avoir sauvegardé son travail.

Ne supprimez pas les bacs, ici ou lors du nettoyage : les clips peuvent être liés d'un bac à des timelines ailleurs (voir references/how-it-works.md).

4. Examiner le résultat. Cela exporte des feuilles d'images étiquetées directement depuis la timeline : chaque scène, le milieu de chaque surbrillance, et juste après chaque clic. Cela prend quelques secondes et ne nécessite aucun rendu, donc les paramètres de rendu ne changent pas. Ouvrez les feuilles dans build/review/.

result = review_frames(project, WORK)

Vérifiez que les surbrillances sont sur leurs éléments, le curseur atterrit là où il doit, les ondulations sont visibles, les légendes tiennent, et rien n'est noir. Pour un examen plus détaillé, review_frames(project, WORK, seconds=[10.5, 20.2]) donne ces moments en taille réelle, en secondes de timeline. plan.py imprime le début de chaque scène, pour convertir à partir des temps de scène.

Les images correspondent à un rendu de la même image, comme testé sur Resolve 21.2. review_frames a besoin de l'API d'exportation d'images que 21.2 possède. Sur un Resolve plus ancien, cela génère une erreur, et le rendu ci-dessous fait le travail : exécutez review.py dessus sans référence pour obtenir les mêmes feuilles.

5. Rendu, lorsque vous avez besoin d'un fichier. Le rendu pour donner une vidéo à l'utilisateur, ou pour la comparaison de remotion-to-resolve. start_render modifie les paramètres de rendu du projet, donc dites-le.

result = start_render(project, WORK, 'review')
result = wait_render(project, '<job id>', 50)   # répéter jusqu'à ce que le statut soit Terminé
python "<SKILL>/scripts/review.py" "<WORK>" "<WORK>/build/render/review.mp4"

Supprimez votre tâche, et seulement la vôtre, car la file d'attente peut contenir celle de l'utilisateur :

result = remove_job(project, '<job id>')

Pour changer quelque chose, modifiez film.json, exécutez plan.py, puis appelez build_film à nouveau, puis examinez à nouveau. Si vous avez fait un rendu, supprimez d'abord la tâche. Exécutez aussi templates.py à nouveau si la marque ou fps a changé. Si l'utilisateur a modifié la timeline manuellement, demandez avant de reconstruire, ou effectuez la modification manuellement sur la timeline.

Fin

Laissez la sauvegarde à l'utilisateur sauf s'il le demande, car sauvegarder valide aussi toutes les autres modifications non sauvegardées qu'il a ouvertes. Rapportez :

  • la timeline et le bac, ainsi que les pistes
  • où les titres ont été installés
  • que la nouvelle timeline est maintenant celle en cours, en nommant celle que preflight a trouvée ouverte, et, si vous avez fait un rendu, que les paramètres de rendu ont changé
  • toute formulation de légende que vous avez déduite, et tout dans les captures d'écran qui entre en conflit avec le brief
  • ce que vous avez vérifié, et ce que vous n'avez pas vérifié. Les images montrent l'image, mais pas le mouvement ni l'apparence de l'Inspector et de la timeline dans Resolve.
  • tout ce qui a été approximé, et ces limites : pas d'audio, uniquement des images fixes, et des surbrillances qui restent sur l'image pendant les mouvements de caméra

Les clips proviennent de leurs fichiers sur disque, donc déplacer le dossier du film ou les captures d'écran rend les clips hors ligne. Conservez aussi build/assets/, car le curseur et les arrière-plans y résident.

Pour supprimer les titres d'une marque de la Bibliothèque d'effets, exécutez templates.py "<WORK>" --uninstall. Cela ne supprime que les quatre fichiers de cette marque. Les timelines déjà construites conservent leurs propres copies : un rendu après leur suppression est sorti identique.

Individual skills in this repo

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

Skills associés