Communitygithub.com

Xkongai/chartreel

Transformez un CSV, une courte description et des données réelles en une courte vidéo d’animation de données précise — classement animé, évolution linéaire, compteur géant ou diagramme en parts — exportée en MP4 + GIF + PNG de couverture aux formats 9:16, 16:9, 1:1, 4:5 ou 3:4 pour Douyin/TikTok, Xiaohongshu, YouTube Shorts, Reels, Bilibili ou X. Utilisez-le lorsque l’utilisateur demande un graphique animé, un classement animé, une « vidéo de données », un classement dynamique, ou souhaite transformer des nombres en un clip court. Chaque chiffre à l’écran provient directement des données source.

Qu'est-ce que chartreel ?

Chartreel est un outil CLI conçu pour créer des vidéos courtes d’animation de données à la fois honnêtes et percutantes. À partir d’un fichier CSV ou de données fournies par l’utilisateur, il génère des vidéos de type bar chart race, évolution linéaire, compteur de grands nombres ou diagramme de parts, avec une règle intangible : chaque valeur affichée provient strictement des données sources, sans invention ni approximation. L’outil prend en charge les plateformes sociales comme Douyin, TikTok, YouTube Shorts, Reels, Bilibili ou X, avec des formats d’image adaptés (9:16, 16:9, etc.). Il intègre des presets de style visuel (classique, cinéma, news, arcade, etc.) et une validation rigoureuse des données. La pipeline complète inclut l’écriture d’une histoire (titre, contexte, moments clés, conclusion calculée depuis les données), la validation du schéma CSV, le rendu MP4/GIF/PNG, et une vérification visuelle automatisée. Chartreel repose sur ffmpeg, Chromium et des polices adaptées, et son utilisation en ligne de commande garantit la reproductibilité des vidéos produites.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Xkongai/chartreel/tree/HEAD/skills/chartreel

Demander à votre IA préférée

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

Documentation

Que fait chartreel ?

Créez des vidéos d'animation de données courtes et honnêtes avec l'outil en ligne de commande chartreel. Vous choisissez le type de graphique, façonnez les données, rédigez l'histoire, effectuez le rendu et vérifiez le résultat. Le moteur de rendu n'affiche que les valeurs du CSV ou des interpolations linéaires entre deux lignes adjacentes.

0. Outils

chartreel doctor          # vérifie ffmpeg, Chromium et les polices

Si chartreel est manquant :

pip install "git+https://github.com/Xkongai/chartreel"   # ou : uv tool install git+https://github.com/Xkongai/chartreel
python -m playwright install chromium                      # à ignorer si Chrome/Chromium est déjà installé
# ffmpeg : macOS `brew install ffmpeg` · Ubuntu `sudo apt install ffmpeg` · Windows `winget install Gyan.FFmpeg`
# Texte chinois/japonais/coréen sur Linux : `sudo apt install fonts-noto-cjk fonts-noto-color-emoji`

1. Obtenez des données réelles — n'inventez jamais les nombres

  • Utilisez le fichier de l'utilisateur s'il en fournit un. Ne le modifiez pas ; reformatez-le en un nouveau CSV.
  • Sinon, récupérez les données depuis une source primaire et citez la source, puis enregistrez la réponse brute à côté du CSV. Voir references/data-sources.md (API de la Banque mondiale, Our World in Data, FRED, Eurostat, offices nationaux de statistiques).
  • Si l'utilisateur tape des nombres dans le chat, utilisez exactement ceux-ci et citez-les comme « fournis par l'utilisateur ».
  • Ne comblez jamais les lacunes de mémoire. Les cellules vides sont autorisées : les lacunes intérieures sont interpolées et chartreel validate indique combien ; les blancs en début/fin signifient que la série est absente.
  • Enregistrez le nom de la source, le code de l'indicateur ou l'URL, et la licence ; ils vont dans --source.

2. Choisissez le modèle

HistoireModèleForme des données
Qui est numéro 1 au fil du temps, dépassements (« Classement PIB 1990–2024 »)racepériode × séries (5–40 séries)
Comment quelques entités ont évolué ou se sont croisées (« Chine vs Inde population »)linepériode × séries (2–8 séries)
Un nombre époustouflant, puis des comparaisons « ×N » (« de 191 Mds $ à 18,7 T $ »)counterlabel,value[,note] (2–5 lignes)
Comment un tout se répartit et évolue (« population mondiale par région »)sharepériode × parts (2–10 parts, valeurs ≥ 0)

3. Façonnez le CSV

annee,Chine,Inde,États-Unis        # large : première colonne = période, une colonne par série
1990,361560229446,320979026420,5963144000000

annee,nom,valeur                       # long : également accepté, pivoté automatiquement
1990,Chine,361560229446

label,valeur,note                      # counter
1980年,191487500000,Début de la réforme et ouverture

Règles : périodes croissantes ; nombres simples (les virgules, $, % sont supprimées) ; UTF-8 (BOM autorisé). Pour les longues plages, conservez des lignes annuelles — plus de lignes donnent un mouvement plus fluide et plus fidèle.

4. Rédigez l'histoire des données

  1. Accroche (titre) : la question ou la surprise, ≤ 2 lignes courtes. « Les plus grandes économies du monde, 1990–2024 », « 中印人口之争 ».
  2. Contexte (sous-titre) : unités et périmètre — « PIB, en USD courants ».
  3. Moments clés (--note "PÉRIODE : texte") : 1–3 événements. Chacun doit être visible dans les données à cette période (vérifiez le CSV avant d'écrire « X dépasse Y »).
  4. Conclusion (--takeaway) : une phrase calculée à partir du CSV. Faites le calcul en code, par exemple python -c "print(18729668435848/361560229446)" → 51,8 → « Le PIB de la Chine a été multiplié par 52 en 34 ans ». Arrondissez honnêtement.
  5. Source (--source) : toujours. Exemple : Banque mondiale WDI (NY.GDP.MKTP.CD), CC BY 4.0.

Regroupez le tout dans une configuration JSON pour que le rendu soit reproductible (references/options.md liste chaque clé) :

{
  "template": "race", "theme": "dark", "aspect": "9:16", "duration": 15,
  "title": "Les plus grandes économies du monde, 1990–2024", "subtitle": "PIB, en USD courants",
  "source": "Banque mondiale WDI (NY.GDP.MKTP.CD), CC BY 4.0",
  "takeaway": "Le PIB de la Chine a été multiplié par 52 en 34 ans", "prefix": "$", "top": 10,
  "notes": ["2010 : La Chine dépasse le Japon"],
  "series": {"Chine": {"emoji": "🇨🇳", "color": "#FF6B6B"}}
}

Vidéos en chinois : ajoutez "locale": "zh" (nombres en 万/亿/万亿) et rédigez le titre/les notes en chinois.

4b. Choisissez un préréglage de style (optionnel, recommandé pour les vidéos sociales)

--style regroupe un thème, une carte d'accroche, un compteur d'années, la décoration du numéro 1 et des effets. Chaque préréglage conserve les chiffres exacts : l'accroche ne couvre que les ~1,5 premières secondes, avant que les données ne commencent à bouger, et rien n'est dessiné sur la conclusion ni (pour les courses) entre les barres.

--styleAspectIdéal pour
classic (défaut)propre, sans accrochedocs, diapos, X
cinematicor sur bleu sarcelle, accroche letterbox, vignette, année roulante, couronne sur le #1, zoom avantYouTube Shorts, Bilibili
newsbandeaux TV : bandeau accroche « DATA », numéros de classement, badge d'année rouge, bandeau sourcesujets sérieux, Weibo/X
editorialpapier, accroche machine à écrire, barres grises + --highlight "A,B", grand chiffre serif pour l'annéeXiaohongshu, newsletters
arcadenéon, confettis + punch quand une barre atteint le top 3, ▲ gain de places, traînées de vitesseDouyin/TikTok, gaming
retroVHS : lignes de balayage, texte chromatique, tampon PLAY, accroche machine à écriresujets nostalgiques
glasstaches de couleur flottantes, panneau de graphique givré, barre de progression en hautsujets tech/produits
boldDouyin grand texte : mots d'accroche géants surlignés, énorme année, numéros de classementDouyin/Kuaishou

Options d'histoire qui accompagnent les préréglages :

  • --hook "Qui possède la plus grande économie du monde ?" : la question de la première seconde (par défaut le titre ; --no-hook la désactive). Elle doit pouvoir être répondue par les données.
  • --cta "Suivez pour plus d'histoires de données" : une petite ligne sous la conclusion.
  • Réglage fin : --fx bg,vignette,letterbox,scanlines,punch,confetti,trails,arrows,glass remplace les effets du préréglage, --no-fx confetti en supprime un ; --year-style watermark|roll|row|badge, --progress timeline|top|both|none, --highlight leader|"A,B", --leader/--no-leader, --ranks, --safe-zone/--no-safe-zone (les préréglages évitent les boutons Douyin/Shorts et la zone des légendes). chartreel styles liste tout.
  • --audio music.mp3 [--audio-fade 1.0] ajoute un morceau que l'utilisateur possède ou sous licence dans le MP4 (rogné, fondu entrée/sortie). Ne téléchargez jamais de musique protégée par le droit d'auteur ; chartreel n'en fournit aucune.

Le "theme" d'un fichier de configuration est ignoré lorsque vous passez --style en ligne de commande (passez --theme pour le remplacer).

5. Validez, effectuez le rendu, vérifiez

chartreel validate data.csv -c story.json          # vérification du schéma + des options, erreurs de lignes/colonnes claires
chartreel render   data.csv -c story.json -o out/  # out/data.mp4, out/data.gif, out/data-cover.png
chartreel preview  data.csv -c story.json -o out/  # optionnel : lecteur HTML autonome pour parcourir

Préréglages de plateforme : Douyin/TikTok/Shorts/Reels -a 9:16 -d 15 (10–30 s) · Xiaohongshu -a 3:4 ou 9:16 · Bilibili/YouTube/X -a 16:9 · X/Instagram feed -a 1:1 ou 4:5. Rythme : environ 0,3–0,6 s par période pour une course. Brouillons rapides : --size 540 --fps 15. --jobs N définit le nombre de travailleurs parallèles. Un rendu de course de 12 s en 1080×1920 prend environ 10–30 s selon le CPU.

Ensuite regardez le résultat avant de le remettre :

ffmpeg -v error -i out/data.mp4 -vf "fps=1,scale=360:-1,tile=4x3" -frames:v 1 out/contact.png

Ouvrez la couverture et la planche contact. Vérifiez : titre non coupé, étiquettes lisibles, pas de tofu CJK (□), la conclusion correspond aux nombres, la source est visible, l'accroche (première seconde) se lit en un coup d'œil. Corrigez et refaites le rendu si nécessaire.

6. Remettez le résultat

Indiquez les chemins des fichiers MP4, GIF et de couverture, la source et la licence, et comment la conclusion a été calculée. Dites clairement si des cellules ont été interpolées (validate l'affiche). Ne prétendez pas à une tendance que les données ne montrent pas.

Règles de précision (non-négociables)

  • Les valeurs à l'écran = valeurs du CSV à chaque période, interpolation linéaire entre les périodes. Le modèle counter compte jusqu'à chaque valeur puis affiche le nombre exact ; dites-le si on vous le demande.
  • Les nombres dérivés (ratios, croissance, « dépasse ») doivent être calculés à partir du CSV, pas mémorisés.
  • Ne mélangez jamais les unités ou les devises dans un même graphique ; ne comparez jamais des valeurs nominales et réelles sans le préciser.
  • Affichez toujours la source. Conservez le téléchargement brut pour que l'utilisateur puisse l'auditer.

Skills associés