Communitygithub.com

ming-xwolf/create-template-video-zh

Utilise les modèles professionnels HyperFrames (style poster/editorial) pour transformer des actualités ou contenus narratifs **chinois** en vidéos courtes 9:16 — entrez une URL ou un fichier .txt, générez un script.json (1 accroche + 6–10 corps + 1 outro, en remplissant uniquement les emplacements de texte des modèles), puis exécutez le pipeline intégré pour le TTS chinois, l'alignement vocal, le mixage audio et le rendu final. Sortie : video.mp4 + voice.mp3 + script.txt (pour Jianying/CapCut). Mots déclencheurs : générer vidéo courte chinoise, vidéo courte actualités chinoises, vidéo narration chinoise, vidéo modèle, vidéo courte style poster, vidéo actualités portrait, short news chinois, /create-template-video-zh.

Qu'est-ce que create-template-video-zh ?

Ce skill permet aux agents IA (comme Claude Code, Cursor, Codex, dans un environnement DSH) de générer automatiquement des vidéos courtes verticales 9:16 à partir d'actualités ou de contenus narratifs chinois. Il s'appuie sur les modèles professionnels HyperFrames (style poster/éditorial) pour la conception et les animations, l'agent n'ayant qu'à remplir les emplacements de texte et produire un fichier `script.json`. Le pipeline intégré se charge du TTS chinois (via OmniVoice, port 8124), de l'alignement audio, du mixage des effets sonores et du rendu final. Il prend en charge l'entrée via URL (web_fetch) ou fichier .txt, et génère trois livrables : `video.mp4`, `voice.mp3` et `script.txt`. Le skill impose des règles strictes pour l'écriture des `voiceText` (chiffres en caractères chinois, pas d'émoticônes ni de symboles) et la mise en page des textes à l'écran (10–14 caractères par ligne, headline ≤3 lignes). L'utilisation est simple : l'agent rédige le script, exécute le pipeline, et livre les fichiers dans le répertoire de travail.

Compatible avec✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/ming-xwolf/create-template-video-zh/tree/HEAD/.agents/skills/create-template-video-zh

Demander à votre IA préférée

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

Documentation

Create Template Video (version chinoise)

Transformez un contenu chinois en une courte vidéo verticale 9:16. La conception et les animations sont entièrement gérées par les modèles HyperFrames dans templates/, vous ne faites que remplir les emplacements de texte et le script.json.

Informations d'installation locale (environnement DSH, à lire impérativement)

  • PROJECT_DIR = /Users/ming/.agents/skills/create-template-video-zh (skill lui-même + pipeline + modèles ; node_modules lié en symlink à la version vietnamienne, dépendances partagées)

  • Structure des répertoires : SKILL.md, templates/ (11 modèles + CATALOG.md), src/ (CLI/pipeline), package.json, .env (endpoint TTS chinois).

  • Table de correspondance des outils : les noms d'outils Claude Code de l'original correspondent ici à DSH : WebFetch → web_fetch, Read → read, Write → write, Bash → bash.

  • Dépendances d'environnement : ffmpeg/ffprobe ✓, Chrome ✓, Node ✓.

  • TTS chinois déployé localement : OmniVoice (MPS) + voix clonée mandarin voice-zh.pt, fonctionne sur le port 8124 (la version vietnamienne utilise fixement 8123, les deux versions ne s'interfèrent pas) :

    bash "$HOME/.agents/skills/create-template-video-zh/scripts/start-tts-zh.sh"
    

    Le script vérifie /health, lance le service en arrière-plan et attend qu'il soit prêt (environ 4 s), les logs se trouvent dans /tmp/omnivoice-zh.log. Une fois lancé, confirmez d'abord avec une sonde chinoise :

    curl -s -X POST http://127.0.0.1:8124/tts -H 'Content-Type: application/json' \
      -d '{"text":"大家好,这是中文配音测试。"}' -o /tmp/zh-probe.mp3 && ls -l /tmp/zh-probe.mp3
    

    000/pas de connexion = non démarré ; en cas d'échec, arrêtez et informez l'utilisateur, ne créez pas d'audio factice. Répertoire du service et notes de déploiement : /Users/ming/Documents/dsh_workspace/omnivoice (SETUP.md).

  • Le premier rendu sera effectué par npx -y [email protected] pour télécharger HyperFrames (nécessite une connexion Internet, environ 15–20 s par scène ; 8–10 scènes totalisent 3–5 minutes).

  • Langue : intégralement en chinois. Les textes à l'écran peuvent mélanger chinois et anglais (AI, GPT, Apple, Apple sont conservés en original), mais voiceText doit être en chinois, et les chiffres doivent être écrits en caractères chinois selon les règles ci-dessous.

Entrée

1 paramètre : URL d'actualité (http:///https://) ou chemin de fichier .txt.

Workflow (strictement dans l'ordre)

Étapes 1–3 : Récupérer le contenu + créer le répertoire de sortie

  • URL → web_fetch pour récupérer le corps du texte, extraire title, content (800–2000 caractères), ogImage (og:image ou null), domain. En cas d'échec (paywall/pure JS/4xx) → demandez à l'utilisateur de sauvegarder le contenu dans un fichier .txt et réexécutez, puis arrêtez.
  • .txt → read pour lire ; title = première ligne (≤40 caractères), content = reste du corps, ogImage = null, domain = "local".
  • slug : utilisez de préférence des mots-clés en anglais ou en pinyin (≤40 caractères, [a-z0-9-]), par exemple xiaomi-17-price, ai-coding-jobs. Si le titre purement chinois ne peut être converti en ASCII, vous écrivez en pinyin ; en dernier recours, utilisez zh-video (le code a également ce fallback du même nom). timestamp = YYYYMMDD-HHmm ; outputDir = <espace de travail actuel>/videos/<slug>-<timestamp>/ — dans l'espace de travail : pratique pour la livraison, et ne pollue pas le répertoire du skill (le sandbox DSH n'autorise généralement l'écriture que dans l'espace de travail). mkdir -p. L'emplacement de la bibliothèque d'effets sonores est pointé par SFX_DIR dans .env vers assets/sfx dans le skill, découplé du répertoire de sortie ; si la bibliothèque est vide, cette étape est automatiquement ignorée, sans affecter le flux principal.

Étape 4 : Lire le répertoire des modèles

Lisez PROJECT_DIR/templates/CATALOG.md, confirmez les modèles et leurs emplacements. Utilisez uniquement les templateId du CATALOG. Actuellement :

HOOK (un seul) : frame-liquid-bg-hero — auréole aurora + grand titre + CTA.

BODY (à choisir selon le contenu, voir Étape 5) :

  • frame-vignelli — 1 chiffre, fond charbon foncé + rouge.
  • frame-pentagram-stat — 1 chiffre/référence, fond sombre néon (grille suisse, chiffre orange lumineux + accent cyan + graphique à barres).
  • frame-bold-poster — déclaration forte multi-lignes + grand chiffre.
  • frame-build-minimal — phrase courte percutante, fond sombre + un mot très grand et gras (glow orange, apparaît lettre par lettre).
  • frame-creative-voltage — slogan créatif, séparation bleu électrique + écriture manuscrite.
  • frame-glitch-title — décalage cyberpunk RGB (fond bruité), adapté aux actualités soudaines/technologies.
  • frame-aicoding-list — liste 2–5 éléments (chaque élément icône + étiquette de niveau), fond dégradé sombre.
  • frame-aicoding-comparison — comparaison A vs B (deux cartes dégradées + badge WIN + données).

OUTRO : frame-logo-outro (par défaut : logo glow + marque + tagline + url) ; frame-statement-outro (alternative : fond papier carte rouge).

Les valeurs d'exemple intégrées aux 11 modèles (data-composition-variables) ont toutes été remplacées par des exemples chinois, vous pouvez voir l'effet final directement dans l'aperçu, ou les copier dans script.json en les modifiant. Mais lors du rendu, passez explicitement inputs : sinon les variables ne seront pas accessibles à l'exécution et le texte sera vide.

Étape 5 : Générer script.json

{
    "version": "1.0",
    "renderer": "hyperframes",
    "aspect": "9:16",
    "metadata": {
        "title": "...",
        "source": { "url": "...", "domain": "...", "image": null },
        "channel": "Nom de la chaîne chinoise"
    },
    "voice": { "provider": "omnivoice", "speed": 1.0 },
    "scenes": [
        /* 8–12 scènes : 1 hook + 6–10 body + 1 outro */
    ]
}
  • provider fixe omnivoice (TTS local, pas besoin de voiceId/API key).
  • Chaque scène : { id, type, voiceText, templateId, inputs } ; inputs doit couvrir les emplacements obligatoires de ce modèle dans le CATALOG.
  • scenes[0].type = "hook" ; scenes[-1].type = "outro" (frame-logo-outro).
  • 8–12 scènes ; voiceText total environ 350–450 caractères (≈90–120s, vitesse chinoise environ 4,5 caractères/s ; la durée finale est déterminée par la voix, le pipeline s'adapte à la voix). Chaque scène body 30–45 caractères, ne traite qu'un seul point ; si un paragraphe a deux points, divisez-le en deux scènes. Objectif : chaque scène dure 6–10s.

Correspondance contenu → modèle :

  • hook → fixe frame-liquid-bg-hero (emplacements : kicker, headline, subheadline, cta, brand). headline par défaut dégradé jaune→violet, peut être modifié avec headline_from/headline_to (deux hex).
  • body → vous choisissez le modèle le plus adapté selon le contenu, et variez autant que possible, n'utilisez pas le même pour tous les body :
    • frame-vignelli : scène avec 1 chiffre à mettre en avant (kicker, number, label, note, brand).
    • frame-pentagram-stat : 1 chiffre de référence/pourcentage + effet graphique à barres (label, headline=chiffre, subtitle, anchor, footer_left, footer_right).
    • frame-build-minimal : phrase courte percutante/un mot-clé (eyebrow, hero=un seul mot, desc, side_left, side_right).
    • frame-bold-poster : déclaration forte multi-lignes + grand chiffre (kicker, date, figure, headline[], standfirst, footer_left, footer_right). La 2ème ligne de headline devient automatiquement rouge.
    • frame-creative-voltage : slogan créatif (meta, display_lines, accent_index, script, caption).
    • frame-glitch-title : sensation soudaine/technologique/horreur (title, subtitle).
    • frame-aicoding-list : liste/comparaison 2–5 éléments (title, accent, accent_from, accent_to, subtitle, items[]). Chaque élément {icon, title, desc, tag, level} : icon à choisir par vous (emoji 🚫 ⚠️ ✅ ❌ 📈 💡 🔒 🚀 …) ; level ∈ danger|warn|good|info détermine la couleur ; tag doit être un court libellé chinois (高危 / 注意 / 利好 / 稳健) ; accent_from/accent_to à choisir par vous (deux hex).
    • frame-aicoding-comparison : compare deux choses (badge, pre, vs, post, left{}, right{}). Chaque côté {label, from, to, icon?, bullets[], stat?, stat_label?, win?} ; from/to sont deux hex de dégradé (de préférence contraste chaud/froid entre les deux côtés) ; win: true marque le gagnant.
    • Suggestion de rythme : si les scènes avec chiffres sont nombreuses, alternez frame-vignelli (charbon+rouge/jaune) avec frame-pentagram-stat (néon sombre orange/cyan) ; pour les scènes sans chiffres, utilisez frame-build-minimal.
  • outro → frame-logo-outro (brand_name, tagline, primary_url).

Règles de mise en page chinoise (textes à l'écran inputs)

  • Le chinois prend plus de place que l'anglais/vietnamien : limitez chaque ligne à 10–14 caractères chinois, sinon passez à la ligne ou réduisez le texte ; headline maximum 3 lignes. Mieux vaut deux caractères en moins que de créer deux lignes et demie.
  • La police des modèles est Inter Tight + system-ui, le chinois tombe en fallback sur PingFang SC, normalement correct ; si le rendu affiche des carrés/豆腐块, insérez "PingFang SC", "Noto Sans SC", au début de font-family dans le compositions/portrait.html du modèle concerné, puis refaites le rendu.
  • Le chinois n'a pas besoin d'espaces entre les mots ; n'ajoutez pas manuellement de letter-spacing négatif, le -3px par défaut des modèles peut coller les caractères ; si le titre semble trop serré, remplacez dans la classe concernée par letter-spacing: -1px.
  • Les émoticônes sont autorisées dans les textes à l'écran, mais 0–1 par champ ; ne les insérez pas dans les champs qui apparaissent lettre par lettre (comme hero de frame-build-minimal), sinon l'animation sera cassée.
  • Les chiffres conservent leur joli format à l'écran (4499 元, 82.7%, 17), ce n'est que dans voiceText qu'ils sont convertis en caractères chinois.

Règles du TTS chinois (voiceText à respecter impérativement)

OmniVoice lit caractère par caractère, les chiffres arabes, les points décimaux, les symboles monétaires sont souvent mal lus ou lus en anglais. Par conséquent, dans voiceText, écrivez tous les chiffres en caractères chinois ; dans inputs (textes à l'écran), conservez les chiffres.

FormeExemple incorrectÉcriture correcte
Décimal82.7%百分之八十二点七
VersioniOS 18.2iOS 十八点二
Modèle produit小米 17小米十七
Pixel200MP两百万像素
Capacité batterie5000mAh五千毫安时
Ordre de grandeur1M tokens一百万 token
Renminbi¥4499四千四百九十九元
Dollar$5五美元
Multiple2x两倍
Pourcentage30%百分之三十
Durée60s六十秒
Ratio3:1三比一
Année2026 年二零二六年
Billion21 万亿二十一万亿
ClassementTop 3前三名
  • Abréviations anglaises : testez d'abord avec une sonde avant de décider : AI, GPT, API, 5G, GPU peuvent parfois être lues lettre par lettre ("A-I"), parfois lues comme un mot anglais. Avant de les inclure dans la vidéo, testez deux phrases en parallèle : AI 很强大 vs 人工智能很强大, choisissez la version qui sonne naturelle, et unifiez tout le film.
  • Les noms de marque conservent leur original (Apple, OpenAI, 小米), les marques chinoises s'écrivent en chinois.
  • voiceText interdit formellement : émoticônes/icônes, URL, et symboles comme & % $ # + = / ; terminez les phrases par 。 ou ? pour une pause naturelle ; utilisez , pour les virgules.
  • Choix entre "两" ou "二" pour les chiffres : utilisez "两" pour les quantificateurs oraux (两千, 两万, 两倍), et "二" pour les ordinaux/années (二零二六年, 第二季度).

Étape 6 : Auto-vérification

  • scenes[0] est le hook, le dernier est l'outro ; chaque templateId est dans le CATALOG ; chaque inputs couvre les emplacements obligatoires ;
  • Largeur des lignes chinoises ≤14 caractères, headline ≤3 lignes ; voiceText sans chiffres arabes/symboles/émoticônes ; émoticônes uniquement dans inputs ; cohérence des termes et de la prononciation des abréviations dans tout le film ;
  • voiceText total 350–450 caractères. Maximum 2 tours de correction silencieuse.

Étape 7 : Écrire script.json

Utilisez l'outil write pour écrire dans <outputDir>/script.json (faites d'abord mkdir -p du répertoire de sortie).

Étape 8 : Exécuter le pipeline

Démarrez d'abord le TTS chinois (voir début) et confirmez que la sonde produit bien un fichier audio, puis exécutez au premier plan :

cd "$HOME/.agents/skills/create-template-video-zh" && npm run pipeline -- "<outputDir>/script.json"

Le CLI suit le pipeline des modèles avec renderer: "hyperframes" : TTS → rendu modèle par modèle → alignement sur la durée de la voix → assemblage + mixage. En cas d'échec, signalez clairement l'erreur et donnez le chemin du outputDir (les voice/scene-*.mp3, clips/scene-*.mp4 déjà rendus seront réutilisés, supprimez-les pour refaire le rendu).

Lorsque vous modifiez le texte chinois et relancez, supprimez d'abord les voice/scene-*.mp3 correspondants, sinon les anciens enregistrements seront réutilisés.

Étape 9 : Livraison

Copiez les trois fichiers produits dans le répertoire de travail de la session, pour faciliter l'ouverture par l'utilisateur :

mkdir -p "<cwd>/videos/<slug>" && cp "<outputDir>"/{video.mp4,voice.mp3,script.txt} "<cwd>/videos/<slug>/"

Puis rapportez (avec des liens cliquables) :

✓ Vidéo : videos/<slug>/video.mp4
✓ Audio : videos/<slug>/voice.mp3 — pour Jianying (sous-titres automatiques/synchronisation labiale)
✓ Script : videos/<slug>/script.txt — texte des plans, facile à modifier manuellement
Durée totale : XX.Xs

Remarques

  • Le rendu de chaque scène prend environ 15–20 s (Chromium) ; 8–10 scènes prennent environ 3–5 minutes.
  • Le TTS est idempotent (conserve voice/scene-*.mp3), les clips aussi (conservent clips/scene-*.mp4).
  • Le TTS chinois a un RTF (facteur temps réel) d'environ 2,8 sur M2 Max : 1 minute de vidéo finale prend environ 3 minutes de TTS pur. Pour accélérer, réglez OMNIVOICE_STEPS à 16 sur le serveur (qualité légèrement réduite, temps divisé par deux) puis redémarrez.
  • Quand assets/sfx est vide, la couche d'effets sonores est absente, sans impact sur le flux principal ; pour des effets sonores, exécutez npm run sfx:download (nécessite Internet) avant de générer (par défaut, ils sont téléchargés dans assets/sfx/ du skill, c'est-à-dire l'emplacement pointé par SFX_DIR dans .env). Les mots-clés sémantiques ont déjà été ajoutés en chinois (警告/失败/纪录/首次/倒计时/史诗/悬念…).
  • Différences avec la version vietnamienne create-template-video : port TTS 8124 + voix chinoise, table de lecture des chiffres chinois, contraintes de mise en page chinoise, mots-clés SFX chinois, fallback slug zh-video. Le code est une copie indépendante (seul node_modules est lié en symlink à la version vietnamienne) ; modifier les modèles/le pipeline n'affecte que ce répertoire. Si vous supprimez la version vietnamienne, pensez à exécuter npm ci pour reconstruire les dépendances.
  • Nouveaux modèles : suivez les instructions de la dernière section de templates/CATALOG.md, puis ajoutez une ligne dans le CATALOG.

Skills associés