Communitygithub.com

Jenesyx/reel-split

Utilisez quand l'utilisateur exécute /reel-split ou demande l'explication du Reel en écran partagé — un panneau de widgets animé sur environ 45 % supérieur de l'image, l'intervenant en dessous en permanence, sans sous-titres ni effets sonores — typique des vidéos « J'ai trouvé cet outil / Voici 5 astuces » sur un plan de tête-parlante en raw/.

Qu'est-ce que reel-split ?

Cette compétence permet de générer des vidéos « Reel » en écran partagé où un panneau de widgets animé occupe la partie supérieure de l'image (par défaut 45 %) tandis que l'intervenant reste en bas, fixe et sans mouvement. Elle est conçue pour les vidéos de type « tête parlante » où l'on présente des outils, des astuces ou des démonstrations, sans sous-titres ni effets sonores. La compétence prend en charge les plates-formes de développement comme Claude Code, Cursor et Codex, et s'appuie sur un pipeline en plusieurs étapes : analyse de la vidéo source, transcription automatique (avec Whisper), suivi du visage, planification des scènes, génération des widgets (HTML/JS avec Hyperframes), puis rendu final via des scripts Python. Elle intègre des règles strictes pour la mise en page, les transitions, la gestion des textes en Farsi/Arabe, et le mapping ton HDR, assurant une qualité professionnelle et une cohérence visuelle.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Jenesyx/arta-edit-studio/tree/main/.claude/skills/reel-split

Demander à votre IA préférée

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

Documentation

Reel — Montage en écran partagé (panneau 45 % au-dessus de l'intervenant)

Un panneau permanent de couleur crème remplit la partie supérieure de l'image (1080 × split.panel_height, par défaut 864 = 45 %) avec des widgets de style UI — cartes, jauges, interrupteurs, terminaux, pastilles — qui illustrent exactement ce qui est dit. L'intervenant se trouve en dessous à l'échelle 1 et ne bouge jamais. Fin : le mot-clé de commentaire en grand à l'écran, puis une carte d'abonnement. Exemple concret : examples/split/ (plan + module de scènes d'une vraie vidéo de 100 s sur cinq compétences Claude).

Arguments : $ARGUMENTS

Valeurs par défaut (ne modifier que si l'utilisateur le demande)

Lire reel.config.json d'abord (sinon reel.config.example.json).

ÉlémentValeur par défaut
Split"split": split.panel_height (864 → panneau 45 %, intervenant 55 % ; 960 = 50/50)
Intervenantéchelle 1, pas de zoom, pas de mouvement ; visage centré dans la zone intervenant (speaker_y)
Zone de sécurité"safe": split.safe = [64, 160, 64, 32] → le contenu de la scène se trouve dans 952 × 672 à partir de 160 px vers le bas (l'en-tête Instagram / la barre de statut du téléphone cachent le haut)
Sous-titres / Effets sonores / MusiqueAucun ajouté. Audio = le mix original de la prise, remuxé par finish.py
PriseSupposer déjà coupée, étalonnée, musique ajoutée → utiliser telle quelle. Brute/non coupée → demander d'abord
CTAMot-clé de commentaire (mot ou chiffre) énorme dans une carte bulle de parole ; carte d'abonnement "handle": creator.handle, texte uniquement, jamais de recadrage du visage
Palettesplit_palette : panneau crème, texte encre, remplis accent ; texte sur crème utilise accent_deep (contraste)

Entrées

Le nom de la prise et le sujet proviennent des arguments. Demander une fois, en un seul message, uniquement ce qui manque : la prise est-elle déjà coupée/étalonnée/avec musique ; le mot-clé de commentaire ; les noms ou le jargon que Whisper pourrait mal entendre (noms d'outils et de produits).

Pipeline

PY = .venv/Scripts/python.exe -X utf8 (Windows) ou .venv/bin/python -X utf8 (macOS/Linux). Les étapes longues en arrière-plan.

#ÉtapeCommande / actionVérification
1Regarderffprobe ; planche contact ffmpeg -i raw/<take> -vf fps=1/5,scale=216:384,tile=9x2 -frames:v 1 work/<take>/sheet.jpg et la regardermur vide au-dessus de la tête ? déjà monté ?
2Transcrire$PY tools/transcribe.py <take> --prompt "<noms, jargon>"relire les noms d'outils ; lacunes > 3 s → retranscrire la fenêtre
3Visage$PY tools/face_track.py <take> --split <panel_height>affiche speaker_y
4Plan des battementsune scène par idée, typiquement 3–7 s, chaque widget lié à un mot prononcé (cue = début du mot). Les scènes changent le contenu, jamais la disposition
5Fichier de planwork/<take>/showcase.json depuis examples/split/showcase.json : video ("../../raw/<file>"), split, speaker_y, safe, scenes_module, scenes[] {kind, start, end, cue{...}}, handle sur la scène d'abonnement ; _note enregistre les numéros de visage
6Scènestools/scenes_<slug>.py depuis examples/split/scenes_5skills.py : une sc_<kind>(i, s) -> (html, js) par type, dictionnaire RENDER, CSS/JS optionnel. Coordonnées dans la zone de sécurité (952 de large) ; ids s{i}-* ; temps de cue absolus. sc_comment, sc_follow sont le CTA
7Construction$PY tools/showcase_build.py <take> ; dans work/<take>/sc : npx hyperframes lint public → 0 erreurs ; npx hyperframes snapshot public -o ../snaps --no-end --describe false --at <milieu de chaque scène> ; lire les planches, corrigertexte à l'intérieur du panneau, rien sous l'en-tête
8Rendu rapide$PY tools/finish.py <take> --seconds 12 ; lire work/<take>/sc/quick_sheet.jpg
9Rendu complet$PY tools/finish.py <take> (arrière-plan) → final/<take>/, vérifier, qa/sheet.jpglire la planche
10Rapportchemin, durée, scènes, résultat de vérification. Si quelque chose de nouveau a été appris, l'ajouter à cette compétence

Règles du panneau

  • Les widgets illustrent la phrase prononcée à l'instant : une carte de dépôt quand ils nomment le dépôt, une jauge quand ils comparent, un barré quand ils disent « pas ça ».
  • Chaque scène s'estompe 0,25 s avant la suivante (le constructeur le fait) ; à l'intérieur d'une scène, les éléments arrivent sur leurs mots de cue.
  • Les nombres à l'écran doivent être des comptes réels de la prise.
  • Les types de scènes intégrés dans showcase_build.py (hook, repo, cta, …) sont antérieurs à la zone de sécurité 45 % et peuvent la dépasser ; écrire les types dans tools/scenes_<slug>.py en vous basant sur examples/split/scenes_5skills.py à la place.
  • Texte en farsi / arabe : classe .fa (RTL sur l'élément, jamais dir="rtl" sur <html>), letter-spacing: 0, chiffres via fa(), un grand zéro en latin 0.
  • Pas de chevauchement de tweens sur une propriété, pas de Math.random / from:"random", les entrées glissées comportent autoAlpha:0 dans l'état de départ.
  • Si un clip source est HDR (HLG), le mappage de tonalité d'abord (TONEMAP dans tools/story_assets.py) — finish.py s'arrête sur « HDR auto-promotion ».
  • hyperframes snapshot n'est pas une preuve du rendu — l'étape 8 l'est.

Individual skills in this repo

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

Skills associés