Communitygithub.com

beachyphotoandfilm-arch/video-skills

Génère des reels finis depuis DaVinci Resolve, rédige des légendes dans la voix du créateur, ajoute une couverture Instagram personnalisée à partir de reel-covers, et les planifie sur Instagram, TikTok et YouTube Shorts via Metricool. Gère le téléversement Drive, les vérifications de conflit avec le calendrier existant et le nettoyage. Déclenchez sur « planifier les reels », « poster ceci », « mettre au calendrier » ou après approbation des reels.

Qu'est-ce que video-skills ?

Cette compétence automatise l'ensemble du pipeline de publication de vidéos courtes (reels) depuis le montage dans DaVinci Resolve jusqu'à la planification sur les réseaux sociaux. Elle prend en charge Instagram, TikTok et YouTube Shorts via l'API de Metricool, avec une gestion complète des médias via un dossier Google Drive partagé (le « media hop ») pour contourner les limitations des URL publiques. Le processus comprend le rendu des reels avec légendes incrustées (via l'API Resolve), la rédaction de légendes dans la voix du créateur (avec ou sans guide vocal), la génération de couvertures personnalisées via la compétence reel-covers, la planification intelligente qui évite les conflits de calendrier, et le nettoyage des fichiers Drive après upload. La compétence inclut également des vérifications de qualité (ffmpeg), des rendus maîtres haute résolution pour archivage, et une gestion des limites de débit (24 Mbps max pour Instagram). Elle est conçue pour être utilisée avec des assistants IA comme Claude Code, et nécessite la configuration préalable d'identifiants Metricool, de dossiers Drive et d'options de légendes.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/beachyphotoandfilm-arch/video-skills/tree/HEAD/skills/schedule-social

Demander à votre IA préférée

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

Documentation

Planifier sur les réseaux sociaux

Configuration : à remplir

Remplacez chaque placeholder ci-dessous avant la première exécution.

placeholderdescription
<VOTRE_ID_METRICOOL_BLOG>Votre blogId de marque Metricool (depuis getBrandSettings)
<VOTRE_FUSEAU_HORAIRE>Fuseau horaire IANA pour la planification, ex. America/Chicago
<VOTRE_HEURE_PUBLICATION>Heure de publication quotidienne par défaut, ex. 10:00
<VOTRE_HANDLE_IG>, <VOTRE_HANDLE_TIKTOK>, <VOTRE_ID_CHAINE_YOUTUBE>Les comptes connectés dans Metricool
<VOTRE_ID_DOSSIER_UPLOAD_DRIVE>Un dossier Google Drive partagé avec « toute personne disposant du lien » (voir le media hop)
<VOTRE_BIBLIOTHEQUE_VIDEO>Où les fichiers finis sont conservés, ex. ~/Videos/Finished
<VOTRE_CTA_STANDARD>Ligne de clôture optionnelle que vous mettez sur chaque légende
<VOTRE_FICHIER_VOIX>Optionnel : chemin vers un fichier guide vocal/de style pour les légendes

Marque : blogId <VOTRE_ID_METRICOOL_BLOG>, fuseau horaire <VOTRE_FUSEAU_HORAIRE>. Connecté : Instagram (<VOTRE_HANDLE_IG>), TikTok (<VOTRE_HANDLE_TIKTOK>), YouTube (<VOTRE_ID_CHAINE_YOUTUBE>).

Le media hop (la partie qui n'est pas évidente)

L'API de Metricool n'accepte que des URL publiques. Elle ne peut pas accepter un fichier local. La chaîne de travail :

  1. Téléversez le MP4 dans un dossier Drive tel que Metricool Uploads (Claude) (<VOTRE_ID_DOSSIER_UPLOAD_DRIVE>). Partagez le dossier une fois avec « toute personne disposant du lien » ; les fichiers héritent de ce partage, donc pas de partage par fichier.
    cd <dossier avec le fichier> && gws drive files create \
      --params '{"uploadType":"multipart","supportsAllDrives":true}' \
      --json '{"name":"<nom>.mp4","mimeType":"video/mp4","parents":["<VOTRE_ID_DOSSIER_UPLOAD_DRIVE>"]}' \
      --upload "<fichier>"
    
  2. Planifiez avec l'URL de téléchargement direct : https://drive.google.com/uc?id=<fileId>&export=download. Le lien /view échoue avec « Échec de la normalisation du média ».
  3. Metricool copie le fichier dans son propre stockage ; le media de la réponse passe à static.metricool.com/....
  4. Supprimez la copie Drive une fois que vous voyez cela. Le stockage ne s'accumule jamais.

Claude ne peut généralement pas rendre les fichiers Drive publics (le sandbox le bloque) et ne peut pas modifier ses propres autorisations. C'est pourquoi le dossier partagé existe. Si un fichier se retrouve en dehors du dossier, demandez à l'utilisateur de le déplacer plutôt que d'essayer de le partager.

Légendes

Si vous conservez un guide vocal, lisez d'abord <VOTRE_FICHIER_VOIX> et mettez-vous en accord. Sinon, utilisez ces valeurs par défaut.

Quand le reel a un CTA par mot-clé en commentaire (un mot-clé qui déclenche un DM ou un email automatisé), la ligne 1 est le CTA :

  • Ligne 1 : Commentez <MOT_CLÉ> et je vous enverrai <nom de la ressource> gratuitement 👇, mot-clé en majuscules, exactement comme prononcé dans le clip CTA du reel.
  • Ensuite la ligne d'accroche et les 2 à 4 lignes pédagogiques ci-dessous.
  • Terminez par le CTA standard, si vous en utilisez un.
  • Le mot-clé doit correspondre au CTA parlé du reel (reel_cta dans le fichier d'état de la vidéo). Un mot-clé par vidéo.

Format pour les reels sans CTA par mot-clé :

  • La ligne 1 est l'accroche. C'est la seule ligne visible dans le fil d'actualité. Généralement la même ligne par laquelle le reel commence.
  • 2 à 4 lignes courtes qui enseignent une chose. Des sauts de ligne entre elles, pas un paragraphe.
  • Pas de spam de hashtags. Peu ou pas.
  • Terminez par <VOTRE_CTA_STANDARD> textuellement si vous en avez un.

Écrivez à partir de ce qui est réellement dans le reel, en utilisant les mots du créateur issus de la transcription, pas des conseils génériques. Court mais éducatif : le spectateur doit apprendre une chose utilisable à partir de la seule légende.

Exemples génériques de la forme :

« Publier tous les jours = ÉPUISEMENT / Publier 3 bonnes vidéos par semaine = CROISSANCE »

« Petit conseil si vous voulez un meilleur son : rapprochez le micro, pas augmenter le gain... »

Rendu

Les légendes sont incrustées : video-reels les place sur V3 sous forme de clip alpha overlay, avec la carte d'accroche texte sur V2. Rien à importer, pas de case à cocher pour l'incrustation.

  1. L'utilisateur coupe le reel. Les deux pistes d'overlay sont des clips indépendants, donc couper V1 ne les déplace pas. Si le timing est recoupé, refaites le rendu des légendes de ce reel plutôt que de les glisser.
  2. Claude en fait le rendu via l'API Resolve. Quatre reels prennent environ 90 secondes.
out = os.path.expanduser("~/Movies/<video>-deliverables/reels-final")
os.makedirs(out, exist_ok=True)
project.DeleteAllRenderJobs()
for i in range(project.GetTimelineCount()):
    t = project.GetTimelineByIndex(i+1)
    if not t.GetName().startswith("Reel"):
        continue
    project.SetCurrentTimeline(t)
    project.SetRenderSettings({"TargetDir": out, "CustomName": t.GetName().replace(" ", "_"),
                               "SelectAllFrames": True, "FormatWidth": 1080, "FormatHeight": 1920,
                               "ExportVideo": True, "ExportAudio": True})
    project.SetCurrentRenderFormatAndCodec("mp4", "H264")
    project.AddRenderJob()

Puis start_rendering. La chaîne de codec est "H264", pas "H.264", et le format est "mp4". Interrogez le répertoire de sortie plutôt que le statut du travail ; les fichiers apparaissent au fur et à mesure. Attendez-vous à environ 40 Mo pour 30 secondes. 3. Le rendu est le point de non-retour pour le timing, donc effectuez d'abord tout recadrage. 4. Vérifiez la sortie avec ffmpeg avant de téléverser, une image à l'intérieur de la fenêtre d'accroche et une au milieu du reel :

ffmpeg -v error -ss 1.5 -i reel.mp4 -frames:v 1 hook.png -y
ffmpeg -v error -ss 8   -i reel.mp4 -frames:v 1 cap.png  -y

Empilez-les dans une seule feuille de preuve et regardez-la réellement. C'est le dernier endroit où une carte d'accroche manquante ou une piste de légende vide peut être détectée, et après la planification, il n'y a pas de suppression.

Où vont les fichiers finis

Tout ce qui est conservé atterrit dans <VOTRE_BIBLIOTHEQUE_VIDEO>/, un dossier par vidéo :

<VOTRE_BIBLIOTHEQUE_VIDEO>/<Vidéo> AAAA-MM-JJ/
    Reels/              ce qui a été publié. 1080x1920 H.264
    Reels/Masters/      même montage, archive 60 Mbps
    Timelines/          un .drt par timeline + le projet .drp
    Covers/             les couvertures de reel Instagram approuvées, 1080x1920 JPG
    Thumbnails/         les options en taille réelle
    YouTube/            l'export longue durée, livraison + master
    Posting schedule.txt   ce qui sort, où et quand

Le fichier de téléversement : aussi élevé que l'API de publication d'Instagram le permet

Metricool publie via l'API de publication de contenu de Meta, qui plafonne ce qu'elle accepte. Téléversez le meilleur fichier qui tient dans ces limites, fabriqué à partir du master 60 Mbps et non du rendu de livraison de Resolve :

  • H.264 High, yuv420p, 1080x1920, GOP fermé, moov au début (+faststart)
  • vidéo max 24 Mbps (la limite est de 25), audio AAC 128 kbps à 48 kHz (Resolve écrit 320 kbps, ce qui est trop)
  • flux vidéo et audio uniquement. Resolve ajoute une piste de données timecode ; supprimez-la avec -dn
ffmpeg -i "Masters/<n>.mp4" -map 0:v:0 -map 0:a:0 -map_metadata -1 -dn \
  -c:v libx264 -preset slow -crf 11 -maxrate 24M -bufsize 48M -pix_fmt yuv420p -profile:v high \
  -g 48 -keyint_min 48 -sc_threshold 0 -flags +cgop \
  -c:a aac -b:a 128k -ar 48000 -movflags +faststart "Reels/<n>.mp4"

Avec CRF 16, les séquences de tête parlante n'utilisaient qu'environ 8 Mbps, donc CRF 11 dépense plus du budget. Exécutez-le en arrière-plan, car plusieurs reels prennent des minutes avec -preset slow. Encodez un fichier à la fois, pas en parallèle : plusieurs encodages parallèles peuvent remplir le disque en cours d'écriture et tronquer tous les fichiers. Instagram re-compresse toujours de son côté ; cela garantit que ce à partir de quoi il commence est aussi propre que possible.

Deux rendus par reel, pas un. Même codec, même résolution, débit différent :

résolutiondébitpour
livraison1080x1920 H.264Passage Resolve, puis remplacé par le fichier de téléversement ci-dessustéléversement
master1080x1920 H.26460 Mbps via "VideoQuality": 60000archive

Mêmes deux passes pour le long format en 1920x1080 : environ 900 Mo pour la livraison, environ 4,5 Go pour le master pour une vidéo de 10 minutes.

1080x1920 est la bonne résolution : Instagram sert du 1080 de large de toute façon, et le crop du reel est déjà sur-échantillonné à partir du 4K. Ne proposez pas ProRes ou une trame plus grande sauf si demandé.

VideoQuality est collant. Définissez-le à chaque passage.

Les paramètres de rendu vivent sur le projet, pas sur le travail. Laissez VideoQuality de côté dans un appel SetRenderSettings et le rendu réutilise silencieusement ce que le précédent a utilisé. Un passage de livraison longue durée qui hérite de 60000 des masters de reel sort environ 5 fois plus gros que prévu.

project.SetRenderSettings({..., "VideoQuality": 12000})   # livraison, ~12 Mbps
project.SetRenderSettings({..., "VideoQuality": 60000})   # master,  ~60 Mbps

Ne comptez jamais sur la valeur par défaut pour le passage de livraison. Et ne faites jamais confiance à la liste des travaux : VideoQuality est lu comme None depuis GetRenderJobList() même lorsqu'il a été appliqué. Vérifiez le fichier fini :

ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of csv=p=0 out.mp4

Vérifiez l'espace libre avant de mettre en file d'attente une paire longue durée. Un master de 10 minutes à 60 Mbps pèse environ 4,5 Go.

Exportez également les timelines dans le dossier, afin que le montage soit portable sans la base de données du projet :

for i in range(project.GetTimelineCount()):
    t = project.GetTimelineByIndex(i+1)
    t.Export(os.path.join(d, t.GetName() + ".drt"), resolve.EXPORT_DRT)
resolve.GetProjectManager().ExportProject(project.GetName(), os.path.join(d, project.GetName() + ".drp"))
  • Faites le rendu directement dedans. Définissez TargetDir de Resolve sur <ce dossier>/Reels, de sorte que rien n'ait à être déplacé plus tard.
  • Renommez à partir des noms de timeline Resolve. Reel_2_-_my_best_tip.mp4 devient 2. my best tip.mp4 : numérotés pour qu'ils se trient, lisibles en un coup d'œil. Mêmes noms pour les masters et les fichiers .drt, de sorte que les trois dossiers s'alignent.
  • Déplacez, ne copiez pas. ~/Movies/<video>-* contient les fichiers de travail (Whisper JSON, SRT, overlay movs, caption movs). Ceux-ci restent en place pour les re-rendus ; les exports finis partent.
  • Écrivez Posting schedule.txt après la planification, listant la date, l'heure et les réseaux de chaque reel, afin que l'utilisateur puisse voir ce qui est déjà parti sans ouvrir Metricool.

Mentionnez l'espace disque uniquement si un rendu échoue réellement pour cause d'espace, ou si une paire longue durée ne tient manifestement pas.

Couvertures (Instagram uniquement)

Chaque reel reçoit une couverture Instagram personnalisée avant d'être planifié. Exécutez la compétence reel-covers après que les légendes ont été approuvées et avant la planification. Elle renvoie un JPG approuvé par reel dans <Video>/Covers/. Montrez les couvertures en même temps que les légendes et les créneaux, de sorte que tout soit approuvé en une seule passe.

Téléversez chaque couverture via le même media hop Drive que la vidéo (même dossier <VOTRE_ID_DOSSIER_UPLOAD_DRIVE>, mimeType: image/jpeg), et passez-la comme videoThumbnailUrl en utilisant le format uc?id=...&export=download. Supprimez la copie Drive une fois que Metricool a sa propre copie, comme avec la vidéo.

Planification

Un post par reel, les trois réseaux, couverture incluse. La couverture n'a d'importance que sur Instagram. TikTok l'ignore sur un compte personnel, et Shorts ne l'affiche que sur une chaîne vérifiée. Ne divisez pas le post.

"providers":[{"network":"instagram"},{"network":"tiktok"},{"network":"youtube"}],
"media":["https://drive.google.com/uc?id=<id vidéo>&export=download"],
"videoThumbnailUrl":"https://drive.google.com/uc?id=<id couverture>&export=download",
"instagramData":{"type":"REEL","showReelOnFeed":true,"isAiGenerated":false},
"tiktokData":{"privacyOption":"PUBLIC_TO_EVERYONE","title":"<titre court>"},
"youtubeData":{"type":"short","privacy":"public","madeForKids":false,"title":"<titre, <100 caractères>"}
  • Ajouter une couverture à un post déjà planifié : updateScheduledPost avec les champs originaux complets du post (texte, providers, media, toutes les données réseau, date) plus videoThumbnailUrl. Cela écrase et n'a pas d'annulation, donc copiez les champs de getScheduledPosts textuellement. Ne remplacez jamais un videoThumbnailUrl ou videoCoverMilliseconds existant : un post qui en a déjà un a déjà une couverture choisie.
  • Si une mise à jour échoue avec « Échec de la normalisation du média » alors que les autres ont fonctionné, la récupération depuis Drive a échoué cette fois. Le post reste inchangé. Téléversez à nouveau le fichier (nouvel id) et réessayez. Réessayer la même URL n'aidera pas.
  • Ensuite, vérifiez avec getScheduledPosts que tous les videoThumbnailUrl des posts commencent maintenant par static.metricool.com, et supprimez les copies Drive.
  • YouTube requiert un titre et madeForKids. TikTok veut un titre court.
  • autoPublish: true permet à Metricool de le publier automatiquement.

Quand planifier (règle par défaut, ajustez selon vos goûts)

Commencez le lendemain d'aujourd'hui. Un post par jour. Si un jour a déjà du contenu, passez au jour libre suivant.

jour = demain
pour chaque post dans l'ordre :
    tant que jour a déjà un post planifié :  jour += 1
    planifier à <VOTRE_HEURE_PUBLICATION> locale le jour
    jour += 1
  • <VOTRE_HEURE_PUBLICATION> dans <VOTRE_FUSEAU_HORAIRE> est l'heure de publication par défaut.
  • Appelez toujours getScheduledPosts en premier, couvrant demain à demain + (nombre de posts + 14 jours), afin de pouvoir voir les trous. Sauter cette vérification peut faire atterrir un post sur un créneau déjà pris.
  • Un jour est considéré comme pris si quoi que ce soit est planifié ce jour-là, brouillons inclus.
  • Ne regroupez pas plusieurs posts sur un même jour et ne laissez pas de trous : le but est une série quotidienne régulière commençant immédiatement.
  • Ne mettez jamais d'étiquette de test dans le texte de la légende. Pas de « TEST BROUILLON », pas de « peut être supprimé ». La légende est la copie finale, toujours, même lors d'un test ; l'utilisateur voudra peut-être la conserver. Marquez les posts de test avec draft: true + autoPublish: false (les brouillons sont visuellement distincts dans le planificateur) et transmettez plannerUrl ainsi que l'id du post pour qu'il puisse être supprimé en un clic.

Long format YouTube (la vidéo principale, pas un Short)

Recommandé : n'envoyez pas de gros fichiers long format via Metricool. Téléversez-les dans YouTube Studio. Un export d'environ 1 Go envoyé via Metricool peut être stocké tronqué en cours de transfert. Resolve place l'index MP4 (moov) à la fin du fichier, donc une copie tronquée est illisible, et YouTube signale « traitement abandonné » après avoir déjà « publié ». Metricool peut ne pas signaler d'erreur. Remettez à l'utilisateur le fichier, le titre, la description et la vignette à coller dans Studio, rendus en 4K (Studio n'a pas de problème de taille). Tout ce qui suit est conservé pour référence.

Si Metricool est utilisé pour un gros fichier, vérifiez le fichier stocké après téléversement avec --fsize ou une vérification de taille, et si la taille du fichier stocké est inférieure de plus de 5 % au fichier local, signalez-le et ne procédez pas à la planification.

Rendu long format

  • Format de livraison : H.264 High, yuv420p, 1920x1080, GOP fermé, +faststart, débit vidéo 12 Mbps (12000 dans VideoQuality), audio AAC 320 kbps (le défaut de Resolve, laissez-le). Pas de -maxrate car le codec Instagram ne limite pas YouTube.
  • Format master : Mêmes codec/résolution, VideoQuality 60000, 60 Mbps. Destiné à l'archivage, pas au téléversement.
  • Couverture : une miniature personnalisée, générée hors ligne et non via la compétence reel-covers. Demandez à l'utilisateur s'il veut une image fixe de la vidéo ou une image séparée. S'il choisit une image séparée, téléversez-la dans le dossier Drive partagé, puis transmettez-la comme thumbnailUrl lors de l'appel updateScheduledPost.

Planification long format

"providers":[{"network":"youtube"}],
"media":["https://drive.google.com/uc?id=<id vidéo>&export=download"],
"youtubeData":{"type":"video","privacy":"public","madeForKids":false,"title":"<titre>","description":"<description>","thumbnailUrl":"https://drive.google.com/uc?id=<id miniature>&export=download"}

La planification long format n'utilise qu'un seul créneau calendaire et n'est pas regroupée avec les Shorts. Les créneaux Shorts et long format sont séparés dans Metricool, donc vous pouvez planifier un long format et un Short le même jour sans conflit. Ne les laissez pas interférer entre eux.

Le script

Entrée : un répertoire de livraison de reels (sortie de compile-reels) avec state.json. Le script le lit, rend les légendes, vérifie les fichiers, puis appelle MetricoolService pour publier.

1. Lire state.json. Obtenir : chemins de reels, chemins de couvertures, transcripts, reel_ctas.
2. Rendre chaque reel. Produire le fichier de téléversement et le fichier master. Vérifier avec ffmpeg.
3. Copier les exports dans <VOTRE_BIBLIOTHEQUE_VIDEO>/<Vidéo> AAAA-MM-JJ/.
4. Écrire les légendes. Utiliser le guide vocal s'il existe, sinon les règles par défaut.
5. Appeler reel-covers. Chaque couverture doit déjà exister ; sinon, échouer.
6. Appeler MetricoolService.getBrandSettings pour obtenir blogId et les comptes connectés.
7. Appeler MetricoolService.getScheduledPosts pour les 14 prochains jours.
8. Trouver les créneaux libres. Planifier chaque reel sur le prochain jour libre.
9. Appeler MetricoolService.schedulePost pour chaque reel.
10. Vérifier que chaque post a maintenant un static.metricool.com videoThumbnailUrl.
11. Supprimer les fichiers Drive.
12. Écrire Posting schedule.txt dans le dossier vidéo.
13. Enregistrer le state.json mis à jour dans le dossier vidéo.

Connexion Metricool

  • hôte : https://api2.metricool.com
  • compte de service : un jeton API Metricool (METRICOOL_API_KEY). Un par utilisateur. Stocké dans .env localement, pas dans le dépôt.
  • Méthodes d'API utilisées :
    • GET /app/gmb/account/getBrandSettings → récupère blogId, les comptes connectés.
    • GET /app/gmb/engagement/getScheduledPosts?blogId=X&limit=50&offset=0 → posts planifiés existants.
    • POST /app/gmb/publishing/schedulePost → planifier un post.
    • PUT /app/gmb/publishing/updateScheduledPost → mettre à jour un post planifié.
    • DELETE /app/gmb/engagement/deleteScheduledPost?blogId=X&postId=Y → supprimer un post planifié.

Consultez la documentation de l'API Metricool pour les corps de requête détaillés et les formats de réponse. Toutes les requêtes nécessitent un en-tête Authorization: Bearer <METRICOOL_API_KEY>.

Gestion des erreurs

  • Échec de rendu : le rendu Resolve peut échouer silencieusement ; vérifiez toujours que le fichier existe et a une taille non nulle après start_rendering. Si un fichier fait 0 octet, signalez-le et ne procédez pas au téléversement.
  • Échec de téléversement Drive : si gws drive files create échoue, le dossier partagé a peut-être changé d'id ou les autorisations ont été révoquées. Demandez à l'utilisateur de vérifier <VOTRE_ID_DOSSIER_UPLOAD_DRIVE>.
  • Échec de planification Metricool : si schedulePost renvoie une erreur, imprimez le corps de la réponse et arrêtez-vous. Ne continuez pas à planifier les reels restants, car l'ordre des créneaux serait alors incorrect.
  • Conflit de créneau : si getScheduledPosts montre qu'un créneau est déjà pris, passez au jour suivant, mais imprimez un avertissement afin que l'utilisateur sache pourquoi un jour a été sauté.

Exemple de flux de travail

Utilisateur : « Planifie les nouveaux reels »

Claude :
1. Trouve le répertoire de livraison le plus récent.
2. Lit state.json.
3. Rendu de chaque reel (environ 90 secondes pour 4 reels).
4. Vérification ffmpeg : montre les images d'accroche et de légende.
5. Rédige les légendes pour chaque reel.
6. Appelle reel-covers → obtient les couvertures.
7. Affiche tout pour approbation : légendes, couvertures, créneaux proposés.
8. L'utilisateur approuve.
9. Téléverse sur Drive, planifie via Metricool.
10. Nettoie Drive.
11. Écrit Posting schedule.txt.
12. Signale : « 4 reels planifiés à partir de demain, 10h, sur IG, TT, YT. »

Individual skills in this repo

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

beachyphotoandfilm-arch/video-skills

Sync camera footage to a separate lapel or field-recorder track (e.g. Tascam DR-10L and similar) and lay it up in DaVinci Resolve. Stitches the recorder's split files, finds each clip's exact place in the audio by matching words then waveforms, cuts one lapel slice per clip so every later skill works unchanged, checks for clipping, and builds a synced timeline in a new Resolve project. Trigger on "sync the lapel", "sync my audio", "line up the recorder", "I used a lav", or any shoot with a separate audio folder (live talks, events, workshops). Run it before paper-edit or video-reels.

beachyphotoandfilm-arch/video-skills

Turn raw talking-head footage into an assembled rough cut inside DaVinci Resolve. Pulls the clips off your footage drive, transcribes them locally, removes failed takes, restarts, asides and dead air, then creates a new Resolve project with two paper-edit timelines ready for your fine trim. Trigger on "paper edit", "cut my raw footage", "make a rough cut", "clean up this video", or when the user points at a folder of raw camera files for a YouTube video.

beachyphotoandfilm-arch/video-skills

Design a unique Instagram cover for each reel in your house style. Reads what the reel is about, writes a short hook headline, picks one of your own photos from a tagged photo library, lays it out like your existing covers, and proofs it in grid view at phone size. Renders locally, never with AI image generation. Can be called by a scheduling skill before reels are scheduled. Trigger on "make covers", "reel covers", "cover photo for this reel", "design the IG covers".

beachyphotoandfilm-arch/video-skills

Build animated brand overlays (motion graphics) for a talking-head video, timed to the speaker's exact words, plus a DaVinci Resolve import file. House style is in-scene type (text beside and behind the speaker's head) plus diagrams. Transcribes the rough cut locally, picks the moments, renders transparent .mov clips, and writes an FCPXML that drops every clip onto the timeline already in position. Trigger on "make animations for this video", "add overlays/motion graphics", "animate this", "b-roll graphics for my YouTube video", or when the user shares a rough cut and asks for graphics.

beachyphotoandfilm-arch/video-skills

Cut vertical Instagram reels out of a long-form talking-head video, hook first. Picks the strongest standalone moments from the transcript, opens each reel on its punchiest line, builds vertical timelines in DaVinci Resolve framed on the speaker's face with the LUT applied, and finishes them: a hook (a held text card, or a word-by-word "build" hook with punch-in) and burned-look captions on V3; this-or-that reels get product graphics and a comment-keyword CTA card. You trim and render, nothing to import. Trigger on "make reels", "clip this for Instagram", "cut some verticals", or after a YouTube video is cut.

beachyphotoandfilm-arch/video-skills

Design YouTube thumbnails and titles for a talking-head video. Pulls graded full-res frames out of the raw footage, renders brand-styled variants in two proven layouts, and proofs them at phone size where the click actually gets decided. Trigger on "make thumbnails", "thumbnail for this video", "title and thumbnail", or after a video is cut.

beachyphotoandfilm-arch/video-skills

Run the whole YouTube video pipeline end to end, one stage at a time, stopping for the creator's approval at every gate. Paper edit, punch-ins, reels, reel covers, scheduling the reels, overlays, thumbnail and title, then scheduling the long-form video, all through Metricool. Keeps state per video so you can stop anywhere and pick up later. Trigger on "/youtube", "let's do the whole video", "run the video pipeline", "continue the <name> video", or when handed raw footage for a YouTube video.

Skills associés