Communitygithub.com

Hammadbaig-hub/daily-shorts-media

Crée et publie automatiquement une vidéo YouTube Short animée gratuite par jour (faits/motivation), alterne anglais et ourdou, vérifie chaque fait en ligne.

Qu'est-ce que daily-shorts-media ?

Cette compétence génère et publie automatiquement une vidéo YouTube Short par jour, sans aucun coût.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Hammadbaig-hub/daily-shorts-media/tree/HEAD/tools

Demander à votre IA préférée

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

Documentation

YouTube Daily Shorts

Une vidéo courte par jour, entièrement automatique, zéro coût. La chaîne publie des faits style « Le saviez-vous ? » et des pièces courtes de motivation, un jour en anglais, le suivant en ourdou.

Paramètres fixes (modifier ici si l'utilisateur les change)

ParamètreValeur
Dépôt média GitHubHammadbaig-hub/daily-shorts-media (public, branche main) — contient aussi les outils de rendu dans tools/
Marque Metricool (blogId)7592220, fuseau horaire Asia/Karachi
Chaîne« Bright Life », pseudo @Bright-Life-m4 (mettre le pseudo dans script.json ; l'appel à l'action mentionne « Bright Life »)
Heure de publication19:00 heure du Pakistan (ou le prochain créneau libre si cette heure est passée ; au moins 15 min à partir de maintenant)
Confidentialitépublique (l'utilisateur a choisi le téléversement automatique complet)

Pourquoi c'est construit ainsi

  • Gratuit : l'utilisateur n'a pas de budget, donc la vidéo est dessinée avec Pillow + ffmpeg (tools/scripts/make_short.py dans le dépôt) et la musique est synthétisée dans le même script, ce qui évite aussi les revendications de droit d'auteur Content ID.
  • Voix off : la narration vient de Kokoro, un petit modèle TTS neuronal gratuit qui fonctionne hors ligne sur CPU (tools/scripts/voice.py). Ses fichiers de modèle d'environ 350 Mo sont téléchargés une fois depuis les versions GitHub dans ~/tts. L'anglais utilise am_michael ; l'ourdou est parlé par la voix hindi hm_omega à partir de texte en écriture ourdoue, avec quelques phonèmes remappés. Chaque diapositive dure aussi longtemps que sa narration, et la musique est atténuée en dessous. Le TTS cloud (Microsoft/Google) est bloqué depuis l'espace de travail, c'est pourquoi il est hors ligne.
  • Hébergement GitHub : Metricool a besoin d'une URL vidéo publique. L'espace de travail cloud peut pousser vers GitHub, et l'URL du fichier brut est publique, c'est donc le pont.
  • Vérification des faits : une chaîne de faits vit ou meurt par l'exactitude. YouTube supprime également le contenu produit en masse, de faible valeur ou trompeur, et un « fait » erroné attire les dislikes et les commentaires de correction. Chaque fait est vérifié avant d'être utilisé — c'est la partie du travail qui ajoute une réelle valeur.

Flux de travail quotidien

1. Obtenir le dépôt et planifier la journée

cd ~ && (git -C daily-shorts-media pull -q || git clone https://github.com/Hammadbaig-hub/daily-shorts-media.git)
pip install -q --break-system-packages kokoro-onnx soundfile pillow numpy
python daily-shorts-media/tools/scripts/plan_today.py daily-shorts-media/history.json

Si le dépôt n'est pas dans la session, attachez-le d'abord avec add_repo (propriétaire Hammadbaig-hub, dépôt daily-shorts-media, accès push) et clonez-le.

plan_today.py renvoie la langue du jour, le thème, si une vidéo a déjà été publiée aujourd'hui, et tous les sujets utilisés jusqu'à présent. Si posted_today est vrai, arrêtez-vous et signalez-le — ne publiez jamais deux fois en un jour.

2. Choisir un sujet

Faites tourner les catégories pour que la chaîne reste variée : espace, animaux, corps humain, histoire, géographie, science, technologie, alimentation, océan, inventions, langage, et environ un jour sur cinq une pièce de motivation (une leçon ou une habitude soutenue par une vraie étude, ou une histoire vraie bien documentée). Choisissez quelque chose qui n'est pas dans already_done et qui n'en est pas une quasi-copie.

Évitez : les conseils médicaux ou diététiques, la politique, les débats sectaires ou religieux, tout ce qui concerne des personnes privées réelles, et les « faits » qui sont des mythes couramment répétés (par exemple, la mémoire de 3 secondes du poisson rouge, la Grande Muraille visible depuis l'espace).

3. Écrire le script et le vérifier

Écrivez un accroche (moins de 12 mots, suscitant la curiosité), 3 à 5 faits (chacun une phrase, moins de 25 mots) et un appel à l'action.

Pour chaque fait, effectuez une recherche Web et confirmez-le à partir d'une source fiable (NASA, National Geographic, Britannica, une université, une étude évaluée par des pairs, une encyclopédie majeure). Si un fait ne peut pas être confirmé, ou si les sources divergent, laissez-le tomber et utilisez-en un autre. Conservez les URL des sources — elles vont dans la description.

Jours ourdous : écrivez un ourdou naturel et simple en écriture ourdoue (pas en ourdou romanisé), comme le parlerait un téléspectateur pakistanais — pas une traduction mot à mot. Écrivez les nombres en mots ourdous (بیس فیصد, ہزاروں) pour que la voix les prononce correctement.

Exemples d'appels à l'action — EN : « Follow Bright Life for a new fact every day ». UR : « روزانہ نئے حقائق کے لیے برائٹ لائف کو فالو کریں ».

Enregistrez sous script.json :

{"lang": "en", "hook": "...", "facts": ["...", "..."], "cta": "...",
 "handle": "@Bright-Life-m4", "theme": 2}

4. Rendu

python daily-shorts-media/tools/scripts/make_short.py script.json daily-shorts-media/videos/<date>-<slug>.mp4 > render.log 2>&1

Le rendu prend environ 5 minutes sur CPU, alors exécutez-le avec Bash run_in_background et attendez l'avis de fin. N'attendez pas avec une boucle pgrep -f make_short — elle correspond à sa propre ligne de commande et ne se termine jamais. La durée suit la narration — généralement 25 à 45 s pour 3 à 5 faits. Gardez-la en dessous de 55 s pour que ce reste une Short : si les faits sont longs, utilisez 3 au lieu de 5.

Parce que le texte est parlé, écrivez-le pour être entendu : épeler les symboles gênants (« percent », pas « % » en anglais ; « فیصد » en ourdou), évitez les parenthèses et les abréviations, et gardez les phrases courtes pour que la voix ne se précipite pas. Ensuite, prenez une image et regardez-la avec Read pour détecter un débordement de texte ou un ourdou cassé :

ffmpeg -loglevel error -y -ss 5.5 -i <video> -frames:v 1 check.png

Si le texte dépasse du bord ou semble incorrect, raccourcissez cette ligne et refaites le rendu.

5. Pousser vers GitHub

Ajoutez l'entrée du jour à history.json : {"date": "...", "lang": "...", "theme": n, "topic": "...", "title": "...", "file": "videos/...mp4"}

Ne conservez que les 20 fichiers .mp4 les plus récents dans videos/ (supprimez les plus anciens — ils sont déjà sur YouTube) pour que le dépôt reste petit. Ensuite :

cd daily-shorts-media && git add -A && git commit -qm "Short <date>: <topic>" && git push -q

URL publique : https://raw.githubusercontent.com/Hammadbaig-hub/daily-shorts-media/main/videos/<file>.mp4

Vérifiez qu'elle renvoie 200 avant de planifier (curl -sI <url> | head -1) ; si l'espace de travail ne peut pas atteindre cet hôte, faites confiance au push réussi et continuez.

6. Planifier sur YouTube via Metricool

Appelez createScheduledPost avec blogId 7592220, une date de niveau supérieur (YYYY-MM-DDT19:00:00+05:00 — l'appel échoue sans elle), et ce JSON info (Metricool copie la vidéo dans son propre stockage, donc le fichier GitHub peut être nettoyé plus tard) :

{
  "providers": [{"network": "youtube"}],
  "text": "<description>",
  "media": ["<URL GitHub brute>"],
  "publicationDate": {"dateTime": "YYYY-MM-DDT19:00:00", "timezone": "Asia/Karachi"},
  "autoPublish": true,
  "draft": false,
  "descendants": [], "firstCommentText": "", "hasNotReadNotes": false,
  "mediaAltText": [], "shortener": false, "smartLinkData": {"ids": []},
  "youtubeData": {
    "title": "<titre>",
    "type": "short",
    "privacy": "public",
    "tags": ["facts", "did you know", "..."],
    "category": "EDUCATION",
    "madeForKids": false,
    "isAiGeneratedContent": false
  }
}

isAiGeneratedContent est faux car la vidéo est un texte animé simple, pas une séquence synthétique réaliste ; la divulgation de YouTube est destinée aux médias altérés réalistes. Si une version ultérieure ajoute des visuels ou des voix réalistes générés par IA, mettez-la à vrai.

Titre : moins de 70 caractères, accroche de curiosité + #shorts. Écrivez-le dans la langue du jour. Exemple : Your Brain Can't Feel Pain?! 🧠 #shorts

Description : 2 à 3 lignes développant l'accroche, puis Sources : avec les URL que vous avez vérifiées, puis 3 à 5 hashtags (#facts #didyouknow #shorts plus des tags de sujet ; les jours ourdous ajoutent #urdu #urdufacts).

7. Rapporter

Informez l'utilisateur en ourdou romanisé, en quelques lignes : sujet, langue, titre, heure planifiée et l'plannerUrl de Metricool. Si l'exécution a lieu en tant que tâche planifiée sans personne qui regarde, envoyez ce résumé avec SendUserMessage.

Vérification hebdomadaire (dimanche, ou quand on demande « channel kaisa chal raha hai »)

Utilisez getAnalyticsDataByMetrics pour le réseau YouTube des 7 derniers jours (vues, temps de visionnage, abonnés gagnés, meilleures vidéos). Résumez ce qui a fonctionné — quelles catégories et quelle langue ont obtenu le plus de vues — et utilisez cela pour orienter les choix de sujets de la semaine suivante vers ce qui fonctionne. Gardez l'alternance des langues sauf si l'utilisateur dit le contraire.

En cas d'échec

  • Metricool rejette la publication : signalez l'erreur exacte ; ne réessayez pas avec la même entrée. Causes courantes : date de niveau supérieur manquante, URL vidéo pas encore accessible (attendez une minute, réessayez une fois), ou la connexion YouTube dans Metricool a expiré (l'utilisateur doit la reconnecter dans Metricool).
  • Git push échoue : le dépôt n'est pas attaché avec un accès push — appelez add_repo avec access : push. S'il dit toujours que Claude n'a pas d'accès GitHub, l'application GitHub Claude doit avoir daily-shorts-media dans ses dépôts sélectionnés (github.com/settings/installations → Claude → Configurer) ; l'utilisateur confirme cette étape lui-même car GitHub demande 2FA.
  • Polices manquantes : elles se trouvent dans tools/assets/fonts/ dans le dépôt ; le script les lit à partir de là.
  • Échec du téléchargement du modèle vocal : faites le rendu avec "voice" : false dans script.json pour que la vidéo du jour sorte quand même (musique uniquement), et mentionnez-le dans le rapport.

Skills associés