toufiqfarhan0/chronicle-ink

Transformez un sujet en un court-métrage documentaire factuel de 2 à 3 minutes, dont chaque image est dessinée par le code que vous écrivez. Pour l’histoire d’une ville, le style model survole le globe jusqu’à la ville réelle en 3D (chaque bâtiment d’OpenStreetMap à sa hauteur réelle) et projette son histoire sur cette maquette, époque par époque, avec des effets synchronisés à la narration (fleuves, murailles, incendies, liens, reconstructions). Les packs Ink-scroll et Roman-atlas couvrent les personnages, monuments et animaux. Seuls un LLM textuel (vous, l’Agent) et des outils sont utilisés ; les faits sont vérifiés par recoupement entre plusieurs éditeurs ; narration et musique via SandBase sont optionnelles.

Qu'est-ce que chronicle-ink ?

Chronicle·Ink est une compétence pour agent IA (compatible avec Claude Code, Cursor, Codex et autres LLM textuels) qui permet de créer des courts-métrages documentaires animés de 2 à 3 minutes sur n’importe quel sujet, en écrivant uniquement du code. L’agent assume tous les rôles d’une équipe de production (réalisateur, chercheur, vérificateur de faits, scénariste, artiste, compositeur, monteur, QA). Les images sont générées par code Canvas 2D (pas de modèle génératif d’image), le son est synthétisé procéduralement (pas de musique IA sauf option SandBase), et les faits sont croisés avec au moins deux sources indépendantes avant d’être inclus. La compétence propose trois packs stylistiques : Ink (rouleau chinois), Roman (atlas parcheminé) et Model (maquette 3D de ville avec bâtiments réels d’OpenStreetMap). Le processus est itératif et segmenté : chaque segment est rendu, vérifié visuellement via des planches-contact, et ne passe au suivant qu’une fois approuvé (max 3 cycles de révision par segment). Le résultat final est un fichier MP4 1080p avec sous-titres VTT, rapport de conformité (LUFS, vérification des glyphes, etc.) et métadonnées AIGC. Aucun appel à un modèle multimodal (image, vidéo, TTS, voix, musique) n’est autorisé ; seuls le LLM textuel et les outils listés (recherche web, API SandBase, FFmpeg, HyperFrames, etc.) sont utilisés.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/toufiqfarhan0/ai-city-remix-workflows/tree/main/chronicle-ink/chronicle-ink

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

Chronicle · Ink (Rouleau d’encre)

Vous (l’Agent qui lit ceci) êtes l’équipe de tournage complète. Cette compétence vous offre une CLI par étapes, un moteur de faits, un thème de série synthétisé par code avec une carte de tempo précise, une trousse à effets sonores procéduraux, un kit de dessin à l’encre et un moteur de rendu HyperFrames. Vous écrivez les affirmations, le plan de tournage avec des légendes d’une ligne, le code des scènes et les critiques. Rien n’appelle un modèle d’image, de voix, de musique, de vision ou un LLM multimédia ; le seul coût est celui de vos propres tokens.

Règle stricte : LLM textuel plus outils seulement. Toute l’écriture, la recherche, la vérification des faits, le code des scènes et la critique sont effectués par le LLM textuel qui exécute cette compétence (par exemple MiniMax M3.1 flash via SandBase, ou tout autre modèle Agent). Vous pouvez appeler des outils : recherche et récupération web, les API de données SandBase, les commandes ci-dessous, FFmpeg. Vous ne devez jamais appeler un modèle de génération multimodale : pas de modèle d’image, de vidéo, de TTS/voix, de musique ou de vision, et aucun fichier image ou audio généré par IA. Chaque image est dessinée par le code de scène que vous écrivez, chaque son est synthétisé par le moteur. Les planches-contact sont examinées sous forme de chiffres et d’images que vous rendez vous-même, et non par un modèle de vision. Un film qui aurait utilisé un modèle multimodal n’est pas un film chronicle-ink.

Exceptions optionnelles : musique et narration. Uniquement lorsque l’utilisateur le demande explicitement, le thème peut être remplacé par un fichier audio dans music/ décrit par music/track.json : soit un enregistrement sous licence ouverte (domaine public, CC0, CC BY 3.0/4.0 ; jamais NC, ND ou SA), soit un instrumental généré par un modèle musical SandBase (par exemple minimax/music/2.6 avec is_instrumental : true, via la CLI ou l’API sandbase uniquement). Les images, légendes, effets sonores et toutes les autres règles restent les mêmes ; le générique final crédite alors le morceau et ne mentionne plus que la musique a été créée par code. Voir references/music-track.md. De même, une voix-off peut être ajoutée : un clip par légende provenant d’un modèle de parole SandBase, disant exactement la légende (voice/voice.json, voir references/voice.md).

Packs de style

brief.style (ou new-project.mjs --style) choisit le rendu ; le moteur, les faits et les vérifications restent les mêmes.

StyleRenduPackUtilisation pour
ink (défaut)Rouleau d’encre chinois, LXGW WenKai, « Thème encre »assets/style-pack.jsonpersonnages, monuments, animaux
romanAtlas parcheminé, Cinzel, thème doux en D-dorienassets/styles/roman/villes, sujets classiques
modelMaquette de ville blanche dans un studio sombre, histoire projetée comme lumière, survol du globe, cartes-photos, « Thème atlas »assets/styles/model/histoires de vie de ville : lire style-model.md

La méthode est la recette publique « Vibe knowledge showcase » : définir le cahier des charges → couper sur le temps → mettre un son sur chaque action clé → rendre segment par segment et corriger chacun avant de passer au suivant.

Cahier des charges (valeurs par défaut)

Duréeseconds 120, 150 (défaut) ou 180 ; ré-accroche toutes les 25–35 s ; 4–6 / 5–7 / 6–8 points de connaissance
Format16:9 1920×1080 à 30 ips (défaut), 9:16 1080×1920 en option
Languebrief.lang = toute étiquette BCP-47 (défaut en ; zh-CN en première classe). Un script sert plusieurs langues
Narrationpas de voix : une légende courte par plan indiquant ce que montre l’image, liée à des affirmations vérifiées, mots-clés en évidence
Musiquele thème de la série du style (encre : « Ink Theme », gong pentatonique en Ré, voix de guqin/xiao), toujours à 88 BPM avec sections intro · couplet · montée · drop · breakdown · montée2 · drop2 · outro ; optionnel music/track.json (music-track.md)
Loudness−14 LUFS intégré, ≤ −1,5 dBTP (loudnorm deux passes)
ÉtiquettesBadge « Généré par IA » de 0 à 3 s, générique final avec la mention AIGC, métadonnées AIGC dans le MP4

Nécessite Node 22+, FFmpeg/ffprobe et Chrome (HyperFrames 0.8.30 s’exécute via npx ; le rendu utilise toujours le chemin CPU pour que la sortie canvas soit identique partout). Exécutez node scripts/chronicle.mjs doctor.

Films de ville (sujet city, structure life)

Pour le cas d’usage « chaque ville a une histoire de vie » : une ville sur Wikidata (coordonnées + population) se verrouille comme city et utilise la structure vie : naissance (fleuve, fondation, nom) → croissance (la zone bâtie s’étend sur la carte) → première hauteur → cicatrices (sac, incendie, peste, guerre) → renaissance → aujourd’hui (même carte, hier et aujourd’hui) → écho (optionnellement la propre ligne de l’auteur « moi et cette ville »). Lire narrative-city.md.

La carte est une géographie réelle, pas une image de modèle :

  1. Écrire geo/places.json dans le projet (centre et lieux par QID Wikidata, zones historiques comme rayons approximatifs) et exécuter node <skill>/scripts/geo.mjs --project <p>. Il lit les coordonnées de Wikidata et les fleuves, eaux, côtes, voies ferrées et routes principales actuelles d’OpenStreetMap (lectures publiques sans clé) dans geo/basemap.json.
  2. Style encre : copier assets/style/exemplars/city-map.js dans scenes/ et piloter chaque plan de carte via ses paramètres (vue, zones, lieux, routes, timbre année, cicatrice). Les scènes lisent les données comme s.geo et les dessinent avec s.kit.cityMap() ; chaque image porte alors « © Contributeurs OpenStreetMap (ODbL) ».
  3. Les étendues historiques sont des approximations : cityMap les marque toujours « AI 示意 / AI illustration ». Les timbres année et les étiquettes de carte ne peuvent afficher que des dates et des noms présents dans les affirmations ou dans une source de niveau 1.
  4. Style model : ajouter un bloc chronology (caméra, époques, étendues, murailles, événements, monuments) à geo/places.json, récupérer les photographies des monuments avec node <skill>/scripts/photos.mjs --project <p> et utiliser la scène unique city-3d (bâtiments et hauteurs réels en WebGL, un seul chemin de caméra continu). Voir style-model.md et la recette étape par étape city-film-recipe.md (comment les échantillons de Rome, New York et Barcelone ont été réalisés).

Pages que cette machine ne peut pas atteindre (Wikipedia est souvent bloquée) : récupérez-les avec votre propre outil et sauvegardez le texte comme sources/<n>-<nom>.txt dans le projet (source : <url> sur la première ligne). Chaque all ultérieur lit ce dossier ; les noms de fichiers maintiennent les identifiants de source stables.

Démarrage rapide

node <skill>/scripts/new-project.mjs --out /abs/films/su-shi --topic "苏轼" --film-lang en
node <skill>/scripts/chronicle.mjs all --project /abs/films/su-shi

all exécute recherche → faits → script → chronologie → musique → scènes → rendu → vérification → rapport et s’arrête dès que vous devez écrire quelque chose (status : awaiting_…). Lisez AGENT_TASK.md dans le projet, écrivez le fichier demandé, relancez all. Les projets doivent résider en dehors du dossier de la compétence.

Rôles de l’équipe

RôleVous faitesCommandeLitÉcrit
RéalisateurPossède le brief, exécute la boucle de segments, décide quand un segment est terminéall, render --segmentbrief.json, planches-contactwork/review.json
ChercheurCherche sans limites (vos propres outils de recherche) ; transmet les pages utilesresearch --add-source <url> / --source-file <file>Wikidata (verrouillage QID), Wikipedia, sites de niveau 1work/research/
Vérificateur de faitsExtrait des affirmations atomiques avec des extraits textuels ; répond aux questions d’implication pour chaque légendefacts, scriptchunks sources, entail.request.jsonwork/facts/claims.agent.json, work/script/entail.agent.json
ScénaristeÉcrit la liste des plans sur les sections du thèmescriptscript.request.json (plan, affirmations, règles)script.json
ArtisteÉcrit le code des scènes avec le kit d’encre ; auto-examine les imagessceneschronologie, references/style-pack.md, exemplairesscenes/<nom>.js
CompositeurRien à composer : le thème est fixe ; vous choisissez les niveaux SFX par actionmusicbrief.secondswork/music/theme.wav, beatmap.json
MonteurRend les segments et le film finalrenderscènes, thème, cues SFXout/segments/, out/film.mp4
QALance les vérifications, lit la feuille de jonction, corrige ou relancecheck, reportfilm, chronologie, carte de tempo, reviewwork/check.json, out/report.*
Animateur cartographiqueÉcrit geo/places.json, exécute la commande geo, pilote les plans city-mapnode scripts/geo.mjsWikidata P625, OpenStreetMapgeo/basemap.json

Champs de la liste de plans (script.json, schéma chronicle-script/2)

bars (1–4 mesures entières d’une section, donc chaque coupe sur un temps fort) · size (large / moyen / rapproché / détail) · camera (fixe, zoom avant, zoom arrière, panoramique gauche, panoramique droite, montée, parallaxe) · transition (cut, ink-bleed, scroll-pan, seal-stamp) · scene + params · description · motion · sfx ({ beat, kind, tier, dur_beats }) · kind + claims (+ hedge) · caption.<lang>.text + em (mots-clés) · kp · rehook. Forme complète et règles : work/script/script.request.json et pipeline.md.

Les faits d’abord

  1. research verrouille le sujet sur un QID Wikidata, lit Wikipedia et les sites de niveau 1 (CBDB, Britannica, UNESCO, GBIF, musées) directement avec des lectures publiques sans clé. Cherchez où vous voulez, mais un fait n’entre dans le film qu’après que facts l’a recoupé : au moins 2 éditeurs indépendants d’accord, au moins un de niveau 1 → verified ; une source → single-source (légendes avec réserve uniquement, ≤ 2, jamais dans l’intro ou les drops) ; conflits → disputed (« un récit »). Les sites de ragot sont des pistes, jamais des preuves.
  2. Si cette machine ne peut pas atteindre un site, lisez-le avec votre propre outil de récupération et sauvegardez le texte textuellement dans un fichier dont la première ligne est source : <url> ; transmettez-le avec --source-file.
  3. Chaque légende, carte, titre et ligne de générique lie des identifiants d’affirmation ; les nombres, dates et noms dans une ligne doivent être dans ses affirmations ; les citations nécessitent une affirmation de citation vérifiée. Ensuite, vous répondez honnêtement à l’implication à partir des seuls textes d’affirmation. Voir factcheck.md.

Histoire sur le thème

Le plan (work/script/plan.json) donne les sections du thème en mesures (150 s : intro 4 · couplet 12 · montée 4 · drop 8 · breakdown 8 · montée2 4 · drop2 8 · outro 7 ; 120/180 s répètent ou réduisent les sections aux limites des mesures), les mesures de ré-accroche et la plage de points de connaissance. Agencez l’histoire sur les sections : accroche dans l’intro, origines dans le couplet, le tournant dans la montée, le premier point fort sur le drop, le coût dans le breakdown, le suspense dans montée2, le moment décisif sur drop2, un écho dans l’outro. Différents sujets ont des rythmes différents : narrative-person.md, narrative-landmark.md, narrative-animal.md.

Légendes : CJK ≤ 16 caractères par ligne, autres écritures ≤ 9 mots / 42 caractères par ligne, ≤ 2 lignes, jamais coupées à l’intérieur d’un nombre ou d’une date, RTL disposé de droite à gauche. Une légende doit être lisible dans son plan (CJK 7 caractères/s, autres 3,3 mots/s). La vérification des glyphes échoue avec glyph_missing au lieu d’afficher des tofu.

Scènes (le risque qualité n°1)

Écrivez scenes/<nom>.js par nom de scène : scene('<nom>', function (g, s) { … }), dessinant une image complète pour le temps s.t avec Canvas 2D et s.kit (papier, coups de pinceau, lavis, bavure d’encre, montagnes, eau, bateau, pavillon, rouleau, bambou, lune, pierre à encre, pinceau, sceau, prune, oies, silhouette en robe, révélation de texte, itinéraire cartographique, chronologie, compteur, parallaxe 2.5D layer(), composition frame()). Commencez par assets/style/exemplars/. Règles, appliquées par un scan statique et à l’exécution : déterministe en s.t (s.kit.rng(seed), jamais Math.random/Date/timers), pas de réseau, pas de DOM ou de stockage. Chronométrez chaque action clé sur son signal (s.cue('seal', 0)), pour que l’effet sonore tombe sur l’image où elle se produit. Ne dessinez jamais un visage réaliste. Liste des à faire / ne pas faire : style-pack.md.

Boucle du réalisateur (segment par segment)

node <skill>/scripts/chronicle.mjs scenes --project <p>             # scan + projet
node <skill>/scripts/chronicle.mjs render --project <p> --segment s1 # ouverture ~11 s d’abord
# regarder out/segments/s1/sheet.jpg et keyframes/*.jpg contre la liste à faire/ne pas faire, corriger, répéter
node <skill>/scripts/chronicle.mjs render --project <p> --segment s2 # puis s3, s4, s5
node <skill>/scripts/chronicle.mjs all --project <p>                 # rendu final déterministe complet + vérification + rapport

Segments : s1 intro · s2 couplet · s3 montée + drop · s4 breakdown + montée2 · s5 drop2 + outro (ou --segment <début>-<fin>). Au maximum 3 cycles de révision par segment ; enregistrez chaque cycle dans work/review.json :

{ "schema": "chronicle-review/1", "segments": [{ "id": "s1", "rounds": [{ "sheet": "out/segments/s1/sheet.jpg",
  "findings": ["le titre chevauche la lune"], "fixes": ["lune déplacée vers la droite"], "open_blocking": [] }] }] }

check échoue visual_review lorsqu’un segment n’a pas de cycle ou a encore des résultats bloquants. Pour les exécutions sans surveillance, all rend le film directement ; l’exigence de révision apparaît toujours dans le rapport.

Sortie

out/film.mp4, out/captions.vtt, out/sheet.jpg, out/joins.jpg, out/report.json, out/report.en.html, out/report.zh-CN.html (bilingue quelle que soit la langue du film). check mesure le LUFS et le pic vrai, les coupes et sections sur les temps forts, et chaque début d’effet sonore à une image près de son action ; il ne peut pas juger si le mix sonore est bon — il faut qu’une personne écoute encore.

Limites

  • Pas de portraits de personnes vivantes ; les cartes ne montrent jamais de frontières nationales ou provinciales ; le champ AIGC de la norme GB 45438 reste à verified : false jusqu’à vérification par rapport au texte standard (compliance.md).
  • Trois packs de style, un thème chacun (ou une piste optionnelle). Cartes d’année : omettre count (une année qui compte à partir de 0 ressemble à une date erronée).
  • Les cartes de ville ne montrent pas de frontières nationales ou provinciales ; les couches OpenStreetMap sont limitées à la ville.
  • Les lexiques de faits (nombres, dates, réserves) existent pour l’anglais et le chinois ; les autres langues de légende utilisent les règles anglaises.
  • Référence : pipeline.md, music.md, sources-allowlist.md, third-party-notices.md.

Skills associés