bounce12340/josh-video-skills

Crée des vidéos courtes verticales avec des images d'archives de style documentaire (comme AYi @ayi_ainotes) : recherche et téléchargement automatiques de métrages libres de droits (Pexels, Mixkit Free, Wikimedia Commons), coupe franche, sous-titres bilingues (traditionnel + anglais, mots-clés en or), voix ElevenLabs, musique synthétisée sombre, carte de fin avec citation et crédits, et couverture de type Vox.

Qu'est-ce que josh-video-skills ?

Ce skill automatise la production de vidéos courtes verticales de style documentaire, destinées à la chaîne Instagram de Josh. Il est conçu pour les équipes de contenu et peut être exécuté par Claude Code ou des bots de création de contenu. Le processus démarre à partir d'un script texte, génère une voix off avec ElevenLabs, aligne le timing mot à mot, puis recherche et télécharge automatiquement des métrages vidéo libres de droits à partir de sources comme Pexels, Mixkit, Wikimedia Commons et les archives Prelinger (domaine public) pour chaque réplique. Le montage applique un style de coupe franche, des sous-titres bilingues (chinois traditionnel et anglais) avec des mots-clés en doré, un titre fixe en haut à gauche, une musique synthétisée, et génère une couverture de style Vox. Le skill produit une ébauche de vidéo au format H.264/AAC, une planche contact, un fichier de crédits, et les fichiers de couverture. Les utilisateurs doivent suivre une checklist de validation finale avant de soumettre la vidéo au bot principal pour publication.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/bounce12340/josh-video-skills/tree/HEAD/stock-footage-reel

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

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

Documentation

stock-footage-reel : Réel de montage d'images d'archives

2026-10-11 Note de fusion : Pour les réels avec narration et images d'archives, ce skill reste le choix canonique. Le documentary-montage d'OpenMontage est réservé aux montages sans ou avec peu de narration ; la répartition est détaillée dans le tableau de décision <SKILLS_DIR>/INDEX.md.

  • Pour plus de sources de métrages (NASA, Bibliothèque du Congrès LOC, NARA, Archive.org, Wikimedia) : utilisez python3 <SKILLS_DIR>/openmontage-house/scripts/om_clips.py --query "..." --out $D/work/om_clips, qui imprimera des entrées pick: {"source":"file",...} directement collables dans shots.json. Vérifiez les licences une par une avant de les ajouter à credits.json.
  • Réglage voix actuel : utilisateur : votre propre voix ElevenLabs « <YOUR_VOICE_NAME> » (<YOUR_ELEVENLABS_VOICE_ID>) ; anglais : Sarah Explains (Nhs7eitvQWFTQBsf0yiT). Sous-titres : chinois traditionnel principal + anglais petit. La procédure pour la voix anglaise est dans l'épisode 07 : <YOUR_WORKSPACE>/media-team/03-drafts/grokbot-team-reel/ (script_en.txt, work/shots.json avec subs_zh+en, synchronisation et montage avec mktiming.py, build_custom.py dans work/). À l'étape 2, choisissez la voix selon la langue.

Destiné à l'équipe de contenu de Josh (IG/Threads @bounce12340, entrepreneur en IA, Agent IA, entreprise individuelle, Taïwan). Suivez ce processus ; Claude Code et le bot de création de contenu peuvent produire la vidéo directement. Ce skill ne produit qu'une ébauche, ne publie pas. La publication est toujours confiée au bot principal, après validation par Josh.

Les scripts se trouvent dans <SKILLS_DIR>/stock-footage-reel/scripts/ (ci-après $S). Les exemples sont dans examples/, les vérifications de licence dans references/licenses.md. Exemple de rendu : <YOUR_WORKSPACE>/media-team/03-drafts/stock-footage-test/test.mp4.

Règles de contenu (à respecter impérativement)

  • Fidélité à l'original : chaque phrase doit correspondre à la source originale. N'inventez pas de chiffres, de citations ; si cela n'est pas dans l'original, ne l'écrivez pas comme tel. Pour les paraphrases, indiquez « adapté de ».
  • Mentionnez l'auteur original : le titre en haut à gauche indique la source, le titre original et l'auteur ; mentionnez-les également dans le générique de fin et la description de la publication.
  • Privilégiez la complétude à la concision : traitez les points clés en détail, ne supprimez pas les arguments importants pour gagner du temps. Mais la vidéo entière doit durer moins de 3 minutes.
  • Débit vocal naturel, ne l'accélérez pas pour faire tenir plus de texte. Si le texte est trop long, divisez-le en deux vidéos ou supprimez les phrases secondaires.
  • Chinois traditionnel, vocabulaire taïwanais (logiciel, données, vidéo, internet, qualité…), utilisez les guillemets「」, pas de tiret (——), utilisez des virgules ou des points.
  • Les sous-titres anglais sont notre traduction, pas une citation originale ; sauf si l'original est en anglais et mot pour mot identique, ne les mettez pas entre guillemets.
  • Utilisez uniquement des métrages dont la licence est claire et commerciale ; cf. references/licenses.md. Ne vous connectez à aucun site, n'utilisez pas de sources payantes, ne contournez pas les restrictions des sites.

Environnement

  • Pexels : PEXELS_API_KEY défini dans les variables d'environnement (ne pas imprimer). Pixabay nécessite PIXABAY_API_KEY (actuellement absent).
  • Synchronisation ASR : uv run --with faster-whisper (télécharge les paquets la première fois, puis utilise le cache).
  • Polices : <YOUR_WORKSPACE>/media-team/00-profile/covers/fonts/ : Noto Sans TC / Noto Serif TC. Pour l'anglais : Noto Sans.
  • Cache des métrages : $S/../stock-footage-reel/cache/ (un même métrage n'est pas téléchargé deux fois).

Procédure

0. Créer le dossier de travail

D=<YOUR_WORKSPACE>/media-team/03-drafts/<sujet>-reel ; mkdir -p $D/work ; cd $D/work

1. Écrire script.txt (une ligne = un plan)

Chaque ligne = une réplique. Optionnel : format [1] texte. Chaque ligne : 1 à 3 propositions, idéalement 5 à 9 secondes.

2. Voix off (ElevenLabs, via MCP ; le script ne peut pas appeler MCP directement)

  1. Choisissez la voix selon la langue : en chinois « <YOUR_VOICE_NAME> », voice_id <YOUR_ELEVENLABS_VOICE_ID> ; en anglais Sarah Explains, voice_id Nhs7eitvQWFTQBsf0yiT. Utilisez creative_list_voices de user-Elevenlabs pour vérifier le nom avant d'envoyer, ne changez pas l'ID de mémoire.
  2. creative_generate_speech : voice_id, model_id: "eleven_multilingual_v2", generations_count: 1 (par défaut 4, qui coûte 4× plus de crédits), prompt : le script entier (laissez une ligne vide entre chaque ligne pour une pause naturelle ; ne mettez pas [1]). N'envoyez pas la même requête deux fois, vous seriez débité deux fois.
  3. Utilisez creative_get_flow_run_status (flow_id, session_ids) pour interroger jusqu'à all_completed, récupérez media[0].url, curl -o vo.mp3 '<url>' (l'URL est valide 2 heures).
  4. Le texte envoyé doit être identique à script.txt (la synchronisation en dépend). Solution de repli : si ElevenLabs est indisponible, utilisez bash $S/scripts/tts_edge.sh script.txt vo.mp3 (edge-tts zh-TW-HsiaoChenNeural), puis changez voice.provider dans shots.json en "Edge TTS (zh-TW-HsiaoChenNeural)", le générique de fin indiquera correctement la source.

3. Synchronisation

uv run -q --with faster-whisper --with numpy python $S/scripts/align.py --audio vo.mp3 --script script.txt --out timing.json

Affiche le début et la fin de chaque plan et le taux d'alignement (≥ 80 % est normal). Les points de coupe sont automatiquement placés au milieu des pauses entre les phrases.

4. Écrire shots.json (exemple : examples/satya_test.shots.json ; les commentaires // ci-dessous ne sont que pour l'explication, le fichier réel ne doit pas en contenir)

{
  "format": "1080x1920",                      // ou "1080x1350"
  "title_zh": "Le long essai du PDG de Microsoft, Satya Nadella",   // Titre fixe en haut à gauche (source)
  "title_en": "Satya Nadella · \"Models as Insider Risks in the Super Intelligence Era\"",
  "max_cut": 4.5,                              // Si un plan dépasse cette durée, couper en plusieurs segments dans le même métrage
  "voice": {"provider": "ElevenLabs", "voice": "<YOUR_VOICE_NAME> (<YOUR_ELEVENLABS_VOICE_ID>)", "model": "eleven_multilingual_v2"},  // chinois ; pour l'anglais, changer pour Sarah Explains (Nhs7eitvQWFTQBsf0yiT)
  "music": "synth",                            // "synth" = musique sombre synthétisée ; ou chemin du fichier audio ; ou "none"
  "music_db": -17,
  "shots": [
    {"keywords": ["server room", "data center"], "highlight": ["risques internes"],
     "en": ["Microsoft CEO Satya Nadella, in a new long essay,", "argues AI models should be managed as an internal risk."]},
    {"keywords": ["computer operators"], "archival": true, "highlight": ["séparation des contrôles"], "en": ["..."],
     "pick": {"source": "archive", "id": "OnGuard1956", "starts": [630, 300]}}
  ],
  "end_card": {"zh": ["Le système le plus digne de confiance", "[[est celui qui n'a pas besoin de confiance.]]"], "en": "...", "by": "── Adapté de Satya Nadella〈...〉", "dur": 4.0, "bg_shot": 2},
  "cover": {"ep": "EP.05", "kicker": "Long essai de Satya Nadella", "title": "Gérer l'IA comme un
[[risque interne]]", "subtitle": "...", "clip_credit": "Images : ...", "frame_shot": 3}
}

Champs importants :

  • keywords : mots-clés de recherche en anglais, essayés dans l'ordre. Décrivez des images concrètes ("security camera", "typing keyboard close up", "server rack lights"), pas des concepts abstraits.
  • archival: true : ce plan utilise des métrages d'archives Prelinger, automatiquement traités avec un filtre magenta et du grain. La méthode d'AYi consiste à utiliser des archives pour évoquer « l'histoire, le passé, la tradition, les années 1970 » ou les métaphores de « contrôle, autorisation, surveillance », et des métrages modernes pour le reste. Une vidéo doit contenir au moins un ou deux plans d'archives pour son style.
  • highlight : mots à colorer en or dans ce plan (doivent être identiques aux sous-titres). Vous pouvez aussi utiliser [[ ]] dans end_card.zh pour marquer le doré.
  • en : liste des sous-titres anglais, doit correspondre au nombre de segments de sous-titres de ce plan. Exécutez d'abord build.py --plan pour voir les segments automatiques, puis écrivez l'anglais en fonction. Si le nombre ne correspond pas, la phrase anglaise entière s'affichera dans chaque segment.
  • pick : spécification manuelle du métrage. {"source":"archive","id":"<identifier>","starts":[secondes,...]}、{"source":"mixkit","id":"23215"}、{"source":"commons","title":"File:xxx.webm","start":12}、{"source":"file","path":"/abs.mp4","license":"...","author":"..."}、{"source":"synth","kind":"code|terminal|grid"}.
  • Autres : grade ("archival" / "modern" / "none"), focus_x (0 à 1, centre horizontal du recadrage vertical), cuts (nombre fixe de segments pour ce plan).
  • cover.frame_shot : quel plan utiliser pour la couverture (prend l'image originale horizontale), par défaut le premier plan d'archives. ep selon la numérotation des épisodes de Josh.

5. Récupérer les métrages

python3 $S/scripts/fetch_footage.py --shots shots.json --work . --timing timing.json
  • Ordre des plans normaux : Pexels (si clé présente) → Pixabay (si clé présente) → Mixkit (uniquement Free License) → Wikimedia Commons (PD / CC0 / CC BY) → synth local en dernier recours.
  • Plans d'archives : Internet Archive Prelinger (uniquement ceux marqués domaine public dans les métadonnées) → Commons.
  • Résultats écrits dans footage.json et credits.json (URL, auteur, licence de chaque métrage). Les lignes commençant par note: indiquent les métrages ignorés et la raison.
  • Pour choisir des segments d'archives : l'automatisation évite les cartes de titre et les répétitions, mais il est préférable de vérifier : python3 $S/scripts/fetch_footage.py --sheet archive:OnGuard1956 --work . → génère sheet_*.jpg (une image toutes les 15 secondes, avec le temps en haut à gauche), utilisez Read pour visualiser et choisir les temps, puis écrivez dans pick.starts, et relancez avec --only <numéro_plan> --refresh pour récupérer ce plan.
  • Sujets informatiques Prelinger utiles : OnGuard1956 (IBM SAGE, ordinateur de défense aérienne, 1956 : console 120s, opérateurs 240s/300s, commutateurs 330s/600s, porte « RESTRICTED AREA » 630s, salle de contrôle 660s). Autres recherches : computer, automation, electronic.
  • Pour changer de métrage : modifiez shots.json puis --only N --refresh.

6. Montage

python3 $S/scripts/build.py --shots shots.json --work . --out .. --name reel --plan   # Voir d'abord les segments de sous-titres
python3 $S/scripts/build.py --shots shots.json --work . --out .. --name reel

Produits (dans --out) : reel.mp4 (H.264 / AAC, 30 ips, auto-compression si > 45 Mo), contact_sheet.jpg (une image par segment + carte de fin), credits.json (avec credit_line et caption_credits pour la publication), cover_reel.png, cover_post.png (modèle Vox de B-Jianbao, via <YOUR_WORKSPACE>/media-team/00-profile/covers/render.py).

Spécifications visuelles (reproduisant le style des vidéos originales d'AYi) :

  • Coupe franche, segments de 2 à 4,5 secondes, léger panoramique horizontal lent. Archives : teinte magenta, flou, grain, vignettage. Moderne : assombri, teinte bleu-vert, saturation réduite, vignettage.
  • Titre fixe en haut à gauche : marque « ●○○○ Josh|AI 一人公司 » + titre source chinois + titre original anglais.
  • Sous-titres : alignés à gauche, maximum deux lignes en chinois (Noto Sans TC Bold), une ligne plus petite en anglais en dessous ; mots-clés dorés #E9A44A. En format vertical, bord inférieur des sous-titres à y=1490, pour éviter le texte de description inférieur et les boutons latéraux d'Instagram.
  • Carte de fin : métrage assombri et flou, police serif pour la citation en grand (deuxième ligne en doré), anglais, « ── Adapté de … », marque, @bounce12340, tout en bas une ligne de crédits en petit (ex. « Archival: Prelinger Archives (Public Domain) • Footage: Pexels • Voice: ElevenLabs »).
  • Audio : voix off + compression side-chain (la musique baisse automatiquement pendant la parole), fondu de sortie de 2,5 secondes, loudness global environ -14 à -16 LUFS.

7. Vérification avant livraison

  1. Utilisez Read pour visualiser contact_sheet.jpg : les images de chaque segment correspondent-elles à la phrase ? Les sous-titres ne coupent-ils pas à un endroit étrange (ex. au milieu d'un nom) ? Risquent-ils d'être masqués par l'interface d'Instagram ?
  2. Les métrages ne doivent pas contenir : de logo ou de marque en gros plan, de visage identifiable dans un contexte négatif, d'images contredisant le sens, de filigrane.
  3. credits.json : chaque métrage doit avoir une URL et une licence ; si CC BY, la description de la publication doit inclure caption_credits.
  4. Vérifiez la durée et la taille du fichier (ffprobe).
  5. Placez le résultat dans <YOUR_WORKSPACE>/media-team/03-drafts/<sujet>-reel/, et rapportez au bot principal : durée, taille, sources des métrages, et les décisions encore nécessaires de Josh. Ne publiez pas.

Limitations connues

  • La plupart des vidéos de Mixkit en téléchargement gratuit sont désormais Restricted (usage personnel non commercial uniquement), le script les ignore automatiquement ; leur utilisation nécessite l'accord de Josh.
  • archive.org est parfois lent ou renvoie une page blanche, le script réessaie trois fois ; en cas d'échec, le plan utilise le synth local, vérifiez le message note: et relancez la récupération.
  • Les métrages Prelinger sont souvent en 4:3, 480p, agrandis fortement en format vertical ; le flou et le grain atténuent l'effet ; privilégiez les plans à la composition simple avec le sujet au centre.
  • Cette machine n'a pas de GPU : une vidéo de 30 secondes prend environ 1 minute de rendu, une vidéo de 3 minutes prend environ 5 à 8 minutes.

Individual skills in this repo

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

bounce12340/josh-video-skills

「名人訪談/演講片段」直式 Reel(Fox Hsiao 式「解說穿插原聲」):配音依語言選聲(中文用「<YOUR_VOICE_NAME>」<YOUR_ELEVENLABS_VOICE_ID>;英文用 Sarah Explains)+繁中主字幕的解說段落,中間穿插 15 到 30 秒的名人原聲片段(16:9 置中、上下模糊底、「原聲 姓名|場合|日期」出處標籤、左上「影片/原頻道」),結尾拋問題給觀眾。一份 JSON spec 一路做到成片、720p 預覽、聯絡表、credits.json、封面。觸發語:「名人訪談」、「演講片段」、「訪談 Reel」、「Fox 式」、「解說加原聲」、「interview reel」。

bounce12340/josh-video-skills

收到「做一支影片/Reel」時先用:判斷影片類型、轉給對應的影片 skill,套用共用本家規則並交給事實編輯。只做草稿,不發文。

bounce12340/josh-video-skills

用 OpenMontage(開源 AI 影片製作流水線,<SKILLS_DIR>/OpenMontage)做 Josh 的影片時的「本家規則」轉接層。適用:長片剪成多支短片(clip-factory)、真實螢幕錄製教學(screen-demo)、翻譯配音(localization-dub)、Podcast 轉影片(podcast-repurpose)、「照這支參考影片做」(reference video 分析)、無旁白紀錄片蒙太奇(documentary-montage),以及幫 stock-footage-reel 加抓 NASA/國會圖書館/NARA/Archive.org 老片。觸發語:「用 OpenMontage」、「長片切短片」、「照這支 Reel 做」、「翻譯配音」、「螢幕教學影片」。

bounce12340/josh-video-skills

用 Playwright 錄「公開網頁」的操作畫面(捲動、滑過、點連結、高亮重點、章節卡),輸出 1080x1920 直式 mp4,當 Reel 的工具/網站導覽素材。觸發語:「錄一段網頁操作」「網站導覽素材」「螢幕錄影素材」「screen record」。只錄公開頁面,不登入、不發文。

Skills associés